Показать полную графическую версию : Opera не воспринимает долговыполняющиеся PHP скрипты.
Здравствуйте.
Проблема такая. Есть у меня PHP скрипты, которые выполняются более минуты. Если смотреть такие скрипты из Opera, то результыты на странице отображаются, но иногда Opera продолжает ждать выполнения скрипта, часики у неё тикают и результатов нет. Хотя в логе Apache видно, что скрипт выполнился (код ответа 200), в error.log никаких записей нет.
IE нормально дожидается выполнения таких скриптов.
Для проверки написал такой скрипт
<?php echo "Старт...";
$period=3; // Минуты.
$t1=time();
while (time()-$t1<$period*60){
set_time_limit (60);
}
echo "Готово. Прошло $period минут."; ?>
Если задать 2 минуты - строка "Готово" - появляется. Если 3 - Opera ждет неизвестно чего. IE выводит ответ "Готово".
Вопрос: С чем это может быть связано? Как заставить Operу получать данные от "долгоиграющих" скриптов?
Версии: Opera - 9.02. IE - 6.0.2900. Apache 2.0.54. PHP - 5.0.0
venoel а mod_setenvif есть? Что в его настройках? (httpd.conf)
vadimiron
28-11-2006, 22:39
while (time()-$t1<$period*60){
set_time_limit (60);
}
Вы наверно ошиблись?
void set_time_limit ( int seconds )
Set the number of seconds a script is allowed to run
Вы наверно имели в виду
sleep(60);
Или как?
Sham
Присутствует в httpd.conf.
LoadModule setenvif_module modules/mod_setenvif.so
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
Остальных директив этого из этого модуля нет.
vadimiron
По умолчанию, время выполнения PHP-скрипта оговорено в php.ini параметром max_execution_time(180 секунд например).
Каждый следующей вызов ф-ции set_time_limit() продлевает работу скрипта на указанное время.
А весь мой тестовый скрипт действительно, можно заменить одним sleep(180)
venoel здесь (http://httpd.apache.org/docs/2.0/misc/known_client_problems.html) твоей проблемы нет...
Я думаю, что и сами разработчики оперы не знают о таком поведении :)
Я бы поэкспериментировал с BrowserMatch + nokeepalive/force-response-1.0, напримерBrowserMatch "Opera" force-response-1.0и посмотрел бы на реакцию... imho только метод тыка...
Ясно. С BrowserMatch эксперементировал. Попробую еще.
Может кто-нибудь у себя провести такой эксперимент? Интересно было бы узнать, как у кого Opera будет себя вести.
<?php
// Скрипт выполняется без ограничений по времени.
set_time_limit (0);
// current time
echo "Начало ".date('h:i:s') . "\n<br>";
// sleep for xx seconds
sleep(180);
// wake up !
echo "Готово ".date('h:i:s') . "\n";
?>
Эксперементировал с BrowserMatch ( ставил nokeepalive/force-response-1.0 вместе и по отдельности) - результат тот же. Т.е. отрицательный.
dimon-lexus
04-12-2006, 14:57
Опера много чего не делает.... Джава скрипты вообще не для неё..... Создай страницу типа:" Вы влезли сюда оперой.. За порчу программного обеспечения и железа мы не в ответе... Заходите с помощью IE."
Маленькая нестыковочка?
// Скрипт выполняется без ограничений по времени.
set_time_limit (0);
Каждый следующей вызов ф-ции set_time_limit() продлевает работу скрипта на указанное время.
Проснулся :)
100 секунд Опера отработала - 180 не хочет.
Igor_I
Спасибо.
Вот на другом форуме результата добился товарищ SiMM.
http://www.progz.ru/forum/index.php?s=&showtopic=29103&view=findpost&p=128740
Буду дальше копаться.
Раз SiMM сказал, так оно и есть.
nncron - и задачу - php.exe /path-to-script/ script.php
Я такие долгоиграющие скрипты выполнял через ИЕ (сканирование фтп-серверов), для проверки на ошибки, а потом по расписанию, вышеназванным способом.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.