Войти

Показать полную графическую версию : Opera не воспринимает долговыполняющиеся PHP скрипты.


venoel
28-11-2006, 12:22
Здравствуйте.
Проблема такая. Есть у меня 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

Sham
28-11-2006, 18:14
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);


Или как?

venoel
29-11-2006, 08:16
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)

Sham
29-11-2006, 20:47
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 только метод тыка...

venoel
30-11-2006, 08:32
Ясно. С 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";
?>

venoel
01-12-2006, 09:07
Эксперементировал с BrowserMatch ( ставил nokeepalive/force-response-1.0 вместе и по отдельности) - результат тот же. Т.е. отрицательный.

dimon-lexus
04-12-2006, 14:57
Опера много чего не делает.... Джава скрипты вообще не для неё..... Создай страницу типа:" Вы влезли сюда оперой.. За порчу программного обеспечения и железа мы не в ответе... Заходите с помощью IE."

Igor_I
04-12-2006, 19:46
Маленькая нестыковочка?

// Скрипт выполняется без ограничений по времени.
set_time_limit (0);

Каждый следующей вызов ф-ции set_time_limit() продлевает работу скрипта на указанное время.

Igor_I
04-12-2006, 20:59
Проснулся :)
100 секунд Опера отработала - 180 не хочет.

venoel
05-12-2006, 13:19
Igor_I
Спасибо.

Вот на другом форуме результата добился товарищ SiMM.
http://www.progz.ru/forum/index.php?s=&showtopic=29103&view=findpost&p=128740

Буду дальше копаться.

Igor_I
05-12-2006, 20:04
Раз SiMM сказал, так оно и есть.
nncron - и задачу - php.exe /path-to-script/ script.php
Я такие долгоиграющие скрипты выполнял через ИЕ (сканирование фтп-серверов), для проверки на ошибки, а потом по расписанию, вышеназванным способом.




© OSzone.net 2001-2012