Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RFpro.ru: Программирование на PHP


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10922
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4342
∙ повысить рейтинг »
vladisslav
Статус: Практикант
Рейтинг: 1353
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / PHP

Номер выпуска:1250
Дата выхода:16.06.2012, 18:00
Администратор рассылки:Устинов С.Е. (Профессионал)
Подписчиков / экспертов:124 / 74
Вопросов / ответов:3 / 9

Консультация # 60365: Еще раз здаствуйте. спасибо за верный ответ, уже проверил: ob_start(); $out_page=ob_get_contents(); ob_end_flush();//Отправка пользователю $fp=fopen($tmp_name,"w"); fwrite($fp,$out_page); fclose($fp); Еще вопрос как организовать сжатие и отправку браузеру если можно код...


Консультация # 47152: Здравствуйте уважаемые эксперты! В процессе создания сайта на бесплатном хостинге оказалось что базу данных мне предоставлять не хотят, только php. В связи с чем возникли вопросы: 1)как можно получить массив с именами всех файлов в папке? 2)Насколько безопасно делать админку с веб-интерфейсом в движке, построенном на файлах. 3)Наскольк...
Консультация # 92637: Приветствую уважаемых! Дело такое. Хочу смастерить что то типа интернет-магазина, на данный момент столкнулся с задачей такого плана, нужно что бы ссылка (путь к файлу) для скачивания менялась раз в сутки. Файлов много, и предполагается такая система для каждого файла. Как этого можно добиться? Спасибо....

Консультация # 60365:

Еще раз здаствуйте.
спасибо за верный ответ, уже проверил:

ob_start();

$out_page=ob_get_contents();
ob_end_flush();//Отправка пользователю
$fp=fopen($tmp_name,"w");
fwrite($fp,$out_page);
fclose($fp);

Еще вопрос как организовать сжатие и отправку браузеру если можно код

Дата отправки: 27.10.2006, 13:44
Вопрос задал: Оськин Дмитрий Владимирович
Всего ответов: 2
Страница онлайн-консультации »


Консультирует PVS@Lviv (Специалист):

Здравствуйте, Оськин Дмитрий Владимирович!
вместо ob_end_flush ставите ob_end_clean, а в конце:
echo gzcomperss($out_page);

P.S.Возможно надо будет послать заголовок, сообщить бровзеру что данные сжаты
header("Content-encoding: gz"); или что-то похожее

Консультировал: PVS@Lviv (Специалист)
Дата отправки: 27.10.2006, 13:54
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует HookEst (Специалист):

Здравствуйте, Оськин Дмитрий Владимирович!
В PHP 4 >= 4.0.4,PHP 5 можно писать ob_start("ob_gzhandler");
ob_gzhandler -- ob_start callback функция to gzip output buffer
эта функция вызывается при вызове ob_end_flash() или по завершении скрипта, проверяет какой тип сжатия поддерживает браузер ("gzip","deflate"), и возвращает соответственно-кодированные данные, собственно эти данные и посылаются браузеру.

Консультировал: HookEst (Специалист)
Дата отправки: 27.10.2006, 14:51
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 47152:

Здравствуйте уважаемые эксперты! В процессе создания сайта на бесплатном хостинге оказалось что базу данных мне предоставлять не хотят, только php. В связи с чем возникли вопросы:
1)как можно получить массив с именами всех файлов в папке?
2)Насколько безопасно делать админку с веб-интерфейсом в движке, построенном на файлах.
3)Насколько целесообразно прочитывать все файлы через цикл для получения имен статей и их описания для странички оглавления, если значения разделены скажем последовательностью "<!--split-->", или все таки лучше вынести заголовки и описания в отдельный файл, если так то опять таки встает второй вопрос.
Заранее спасибо за ответ.

Дата отправки: 23.06.2006, 19:13
Вопрос задал: Bolzamo
Всего ответов: 4
Страница онлайн-консультации »


Консультирует Марк Крейн:

Здравствуйте, Bolzamo!
1. Открыть каталог функцией opendir. В цикле while просто вывести имена всех файлов. Примерно так:
while ($d==readdir($dirhandle))
{
echo $dir;
}

2. База данных в любом случае безопаснее чем файлы. Но если встаёт такой вопрос, то Вам нужно в первую очередь позаботиться о блокировках файла. То есть, скажем, писать в файл не так:

$file=fopen("file.txt", "w");
fwrite($file, "строка");
fclose($file);

А так:

$file=fopen("file.txt", "w");
flock($file, LOCK_EX);
fwrite($file, "строка");
flock($file, LOCK_UN);
fclose($file);

Во втором примере показана блокировка файла от других процессов. Т.е. когда Вы пишете в файл что-то, чтобы никто эту информацию не испортил. Но даже с блокировками в конце концов возникнет вопрос когда движком будет пользоваться слишком много людей. Так что ответ однозначный - делать такое точно небезопасно.

3. Мне кажется что лучше вынести их в отдельный файл. В принципе, конечно, и так и так морока. С базой было бы гораздо легче. Но если из двух зол выбирать меньшее, я бы посоветовал вынести имена статей и их описания в отдельный файл.

Надеюсь что хоть немножко прояснил Вам ситуацию. Если что, пишите в мини-форум.
Удачи!

Консультировал: Марк Крейн
Дата отправки: 23.06.2006, 21:46
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Mamont:

Здравствуйте, Bolzamo!

Q1) как можно получить массив с именами всех файлов в папке?
A1)
<?
$dir_name=$_SERVER[\'DOCUMENT_ROOT\'].\'/\';
$d=opendir($dir_name) or die($php_errormsg);
while( false !==($f=readdir($d))){
if (is_file("$dir_name$f")){
$f_arr[]=$f;
}
}
closedir($d);

foreach( $f_arr as $name ){
echo "$name<br>\n";
}
?>

Q2)Насколько безопасно делать админку с веб-интерфейсом в движке, построенном на файлах.
A2)Если интересует возможность потери данных (когда используется один и тот же файл), то при одном администраторе таких проблем не возникает (никто больше не пытается получить монопольный доступ к файлу) - просто используем блокировку файла:
$f=fopen(\'name.txt\',\'a\');
flock( $f, LOCK_EX );
fwrite( $f, \'text\' );
fflush( $f );
fclose( $f );

Q3)Насколько целесообразно прочитывать все файлы через цикл для получения имен статей и их описания для странички оглавления, если значения разделены скажем последовательностью "<!--split-->", или все таки лучше вынести заголовки и описания в отдельный файл, если так то опять таки встает второй вопрос.
A3) (также касается Q2)
Используя хранение всей информации (заголовок, описание, статья...) в одном файле облегчает реализацию создания/редактирования статьи, но при создании списка необходимо прочитать заголовки всех файлов, что не повышает производительности.
Так же приходиться использовать имя файла как передаваемый параметр, что использовать не безопасно - возможно выполнение произвольного кода и т.д. и т.п., за этим глаз и глаз нужен. Во втором варианте можно ввести поле ID и передавать его и такая проблема отпадает. В принципе этот вариант возможен и в первом случае, но реализуется сложнее (да и работает намного медленней).
P.S. Сам когда-то реализовывал движок со вторым вариантом и использовал подобие формата dBase(.dbf): выравнивал поля по ширине (позволило редактировать описание и т.д. не перезаписывая весь файл, а только нужную строку), записи не удалялись, а помечались "#" в начале строки (тоже весь файл не перезаписываем). И не забудь перед открытием файла со статьей проверять его наличие: if (file_exists(\'filename.txt\'))

Ну в общих чертах это все, удачи!!!

Консультировал: Mamont
Дата отправки: 24.06.2006, 10:14
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Cybernetic_Creature:

Здравствуйте, Bolzamo!
1)
array glob(string $filter) e.g. foreach(glob(*.*) as $nextfile) print $nextfile;
http://php.net/manual/ru/function.glob.php
2)
если нет другого выхода.
хотя можно использовать SQLite
http://php.net/manual/ru/ref.sqlite.php
3)
лучьше конечно хранить каждую статью в отдельном файле.
что бы потом редактировать было проще

Консультировал: Cybernetic_Creature
Дата отправки: 24.06.2006, 10:27
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Цепковский Антон Сергеевич:

Здравствуйте, Bolzamo!

Я бы всё-таки заполучил хостинг с БД, избавитесь от многих проблем. Например на hut.ru.

С уважением,
Антон Цепковский

Консультировал: Цепковский Антон Сергеевич
Дата отправки: 25.06.2006, 01:23
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 92637:

Приветствую уважаемых!
Дело такое.
Хочу смастерить что то типа интернет-магазина, на данный момент столкнулся с задачей такого плана, нужно что бы ссылка (путь к файлу) для скачивания менялась раз в сутки. Файлов много, и предполагается такая система для каждого файла. Как этого можно добиться?
Спасибо.

Дата отправки: 23.06.2007, 23:05
Вопрос задал: Чуфринов Вадим (Посетитель)
Всего ответов: 3
Страница онлайн-консультации »


Консультирует Sea:

Здравствуйте, Chufrinov Vadim!
Вообще способов довольно много, но приведу наиболее простой:
Есть таблица (неважно в БД или в файле):
alias file
---------------------------------------------------------
dvf45s34get downloadedFile1.rar
jk34u345iuh downloadedFile2.rar
9dfg8dfg8df downloadedFile3.rar
8dfs786gdfg downloadedFile4.rar
dfgs98sdfg7 downloadedFile5.rar

Смысл в том, что для каждого файла существует псевдоним. И все обращения к файлу происходят непосредственно по этому псевдониму. Например:
http://www.site.ru/download.php?8dfs786gdfg

Тогда скрипту download.php остается только из таблицы выбрать файл по его псевдониму 8dfs786gdfg и это будет downloadedFile4.rar.
Вот и всего делов то.

Ну и раз в сутки просто по рандому или как угодно меняете поля alias в таблице.

Консультировал: Sea
Дата отправки: 23.06.2007, 23:59
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Lain:

Здравствуйте, Chufrinov Vadim!
Мжно сделать чтобы ссылка менялась раз в сутки - для этого можно использовать идентификатор сессии(предварительно сделав его действительным в течении суток)

Консультировал: Lain
Дата отправки: 24.06.2007, 03:11
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Шпилевский Евгений Васильевич:

Здравствуйте, Chufrinov Vadim!

Могу предложить один способ, не скажу что он лучший, но возможно вам подойдет...

При создании ссылки генерируете ее вида http://site /download.php?id=dsfhsda32fhjk4sad42

Где в роли id будет выступать любая последовательность символов (можно использовать md5). Эту последовательность заносите в базу данных
-----------------------------------------------------
| id | path |
-----------------------------------------------------
|dsfhsda32fhjk4sad42hfkjsadf | files\1.rar|
------------------------------------------------------

на странице download.php пишите код получения ссылки из базы, а затем нечто похожее
// в $path храниться получиная ссылка на файл
header("Content-type: application");
header(\'Content-Disposition: attachment; filename="1.rar"\');

$f = fopen($path,\'r\');
while (!feof($f))
{
print fread($f,4096);
}

Консультировал: Шпилевский Евгений Васильевич
Дата отправки: 25.06.2007, 11:54
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное