незавершение скрипта браузером

Статус
В этой теме нельзя размещать новые ответы.

_hxc-

Новичок
незавершение скрипта браузером

Такая проблема - скрипт выполняется несколько минут, затем работа завершается (по файрволу смотрю), а в браузере время идёт и идёт..
Подскажите, как этого избежать
 

denver

?>Скриптер
Не выполнять через браузер скрипты которые расчитаны на несколько минут. Если это веб-морда то переписать так чтобы пользователю не приходилось ждать больше чем 2 сек.
 

_hxc-

Новичок
Переписать законы физики? Скрипт работает с вебом, поэтому и долго (выше я упомянул о файрволе)

Проблема существует в Опере, попробовал в ФФ - всё ок..
 

nerezus

Вселенский отказник
Тебе говорят, что скрипт не должен выполняться более нескольких секунд.
 

deepslam

Новичок
Выстави timeout в браузере FF
Он у тебя видимо соединение сбрасывает
 

themylogin

Новичок
Все действия, которые длятся долго, но надо выполнять через браузер делать через register_shutdown_function
 

Андрейка

Senior pomidor developer
themylogin
из-за какой фикни? и как register_shutdown_function помогает бороться с ней? эт я на всякий случай интересуюсь.. вдруг понадобится и мне :(
 

SaNeK

Новичок
Я вот чего-то тоже не врубился, каким образом register_shutdown_function может пригодиться в решении подобной проблемы? themylogin, поясняй.
 

vovanium

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

themylogin

Новичок
Андрейка, SaNeK, ну допустим имеется скрипт, выполняющийся длительное время :), и никак иначе. Пользователь запускает этот скрипт
PHP:
echo 'Подождите, пожалуйста...<br />';
while(true){ ... }
echo 'Выполнено!';
Пользователь сидит, ждёт... плохо :( Вместо этого
PHP:
echo 'Подождите, пожалуйста...<br />';
function blablabla(){
	while(true){ ... }
}
register_shutdown_function('blablabla');
echo 'Процесс пошёл, <a href="status.php">Узнать статус процесса</a>';
Зарегистрированные register_shutdown_function() функции будут вызваны после того, как запрос выполнен окончательно (включая отсылку любых буферов вывода)
То есть сначала за милисекунды всё отдадим пользователю, а потом запустим процесс.
Нужно броузеру периодически отдавать какие-то данные, чтобы броузер не откллючался по таймауту
А у меня трафик дорогой, может не надо?
 

hermit_refined

Отшельник
Зарегистрированные register_shutdown_function() функции будут вызваны после того, как запрос выполнен окончательно (включая отсылку любых буферов вывода)
это не совсем соответствует действительности.
выполняющийся длительное время
man crontab?..
 

Андрейка

Senior pomidor developer
themylogin
т.е. по вашему в момент вызова shutdown функции соединение с клиентом теряется. так?
 

hermit_refined

Отшельник
а что на самом деле?
In PHP 4.0.6 and earlier under Apache, the registered shutdown functions are called after the request has been completed (including sending any output buffers), so it is not possible to send output to the browser using echo() or print(), or retrieve the contents of any output buffers using ob_get_contents(). Since PHP 4.1, the shutdown functions are called as the part of the request so that it's possible to send the output from them.

-~{}~ 03.01.07 14:27:

...выполняется на виртуальном хостинге, system() заблокирован, в кронтаб скриптом не добавишь...
во-первых, не надо хоститься на недохостингах.
во-вторых, необходимость по запросу пользователя производить длительные манипуляции - сомнительна. если же это лазейка, чтобы администратор сайта смог запускать скрипты на хостинге, потому что иначе никак - см. во-первых.
 

themylogin

Новичок
Андрейка, да, я так и думал, пока hermit_refined не показал суровую реальность :(
Странно, в моём мане такого не было, последний раз обновлял полгода назад :-/
А ещё есть способы делать подобное? Пока на ум приходит только создание iframe с бедным длительно выполняющимся скриптом...
во-первых, не надо хоститься на недохостингах.
я тоже рад бы, но вы объясните заказчикам, что мастерхост/мажордом/рбк и прочие распиаренные компании на самом деле недохостинги
во-вторых, необходимость по запросу пользователя производить длительные манипуляции - сомнительна
у SEO-заказчиков такие потребности часто возникают - множество обраток проверять, у множества сайтов тиц брать...
 

Фанат

oncle terrible
Команда форума
А SEO-заказчиков, как прочих спамеров, надо гнать в три шеи.
 

SaNeK

Новичок
themylogin
Может я и не прав, конечно, но:
1. crontab у мастерхоста есть точно
2. system() / exec() нужны ну в очень специфичных случаях - большинство проблем можно и без них решить. Вот включение safe_mode на некоторых хостингах меня действительно удручает...
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху