Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Opera не воспринимает долговыполняющиеся PHP скрипты. (http://forum.oszone.net/showthread.php?t=75328)

venoel 28-11-2006 12:22 517929

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

Sham 28-11-2006 18:14 518073

venoel а mod_setenvif есть? Что в его настройках? (httpd.conf)

vadimiron 28-11-2006 22:39 518150

Цитата:

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
Вы наверно имели в виду
PHP код:

sleep(60); 


Или как?

venoel 29-11-2006 08:16 518270

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 518634

venoel здесь твоей проблемы нет...
Я думаю, что и сами разработчики оперы не знают о таком поведении :)
Я бы поэкспериментировал с BrowserMatch + nokeepalive/force-response-1.0, например
Код:

BrowserMatch "Opera" force-response-1.0
и посмотрел бы на реакцию... imho только метод тыка...

venoel 30-11-2006 08:32 518783

Ясно. С BrowserMatch эксперементировал. Попробую еще.

Может кто-нибудь у себя провести такой эксперимент? Интересно было бы узнать, как у кого Opera будет себя вести.
PHP код:

<?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 519228

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

dimon-lexus 04-12-2006 14:57 520701

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

Igor_I 04-12-2006 19:46 520798

Маленькая нестыковочка?

PHP код:

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

Цитата:

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

Igor_I 04-12-2006 20:59 520822

Проснулся :)
100 секунд Опера отработала - 180 не хочет.

venoel 05-12-2006 13:19 521088

Igor_I
Спасибо.

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

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

Igor_I 05-12-2006 20:04 521256

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


Время: 11:10.

Время: 11:10.
© OSzone.net 2001-