Перейти к контенту

Как подать признаки жизни?


Рекомендуемые сообщения

Есть скрипт, который выполняет какую-то длительную операцию, продолжающуюся некоторое неизвестное заранее время.

Можно каким-либо образом во время этой операции подавать какие-то признаки жизни или еще что-нибудь делал, чтобы сервер не выдал "Gateway timeout".

Может, как-нибудь такая штука делается?

 

или это вообще не то, о чем я думаю? :D

 

или можно как-нить расширить это время до таймаута без участия хостера?

Ссылка на комментарий
Поделиться на других сайтах

серверу пофиг на такие признаки жизни.

в моем случае, по крайней мере.

 

случай - посылка файла на ftp в асинхронном (т.е. в процессе upload'а могу что-то сделать) режиме сервером.

Ссылка на комментарий
Поделиться на других сайтах

d1pro, можно чуть подробнее?

шлюз какой именно?

 

какой-нить мой, сайтовый или ftp ?

 

скрипт примерно такой:

$handle = fopen( $fileName, "r" );		
$path_parts = pathinfo( $fileName );		

$ret = ftp_nb_fput( $this->connection, $path_parts['basename'], $handle, FTP_BINARY );
while ( $ret == FTP_MOREDATA )
$ret = ftp_nb_continue( $this->connection );

if ( $ret != FTP_FINISHED ) $this->error = true;

fclose( $handle );

причем, иногда срабатывает, иногда — нет :D

Ссылка на комментарий
Поделиться на других сайтах

PHP даёт определённое время скрипту на выполнение. Эта величина регулируется в php.ini и составляет по умолчанию 30-ть секунд.

По истечению этого времени сервер даст атлуп. Браузер также может дать атлуп по истчению таймаута. Это настраивается уже отдельно и не представляет интереса, т.к. настраивается каждым в отдельности.

 

Что касается стороны сервера, то можно

1) увеличить этот период. Но это подходит только для заранее известного максимального времени работы скрипта. Минусами является то, что это значение может изменять только хостер. Ещё одним минусом является то что, сменив хостера, вы будете опять зависимы от этого числа.

2) использовать директиву set_time_limit() для указания максимального времени. Если будет указан 0, тогда php не будет контролировать время вообще. Т.е. страница зависнет и обновится после окончания работы. Однако это не спасёт от атлупа самого браузера.

3) использовать директиву ignore_user_abort()

она позволяет продолжать выполнение скрипта, даже если пользователь закрыл окно браузера, дав понять таким образом скрипту, что далее выполнять скрипт уже не надо.

Совмещение двух директив из пп. 2 и 3 даст желаемый результат.

А вообще скрипты, которые неизвестно сколько будут выполняться, нужно делать на перле. Например, всякие индексаторы.

 

Что касается признаков жизни (т.е. например, прогресс), это можно сделать только запуском с восстановлением работы. Также как сделаны все перебиратели паролей. Т.е. запускается определённый скрипт с циклом, перед тем как истекут стандартные 30-ть секунд, он запоминает текущее значение итерации и перезапускает скрипт, передав в качестве параметра это число.

Скрипт на старте анализирует это число. Если его нет, значит это начало работы. Если оно есть, то он как-то визуализирует текущий прогресс, основываясь на этом числе и продолжает выполнять цикл далее в течение следующих 30-ти секунд и т.д., пока цикл не закончится.

В вашем случае нужно перед выходом запоминать текущую позицию в файле, закрывать его, а потом, при перезапуске делать seek на зампоненную позицию + 1.

Ссылка на комментарий
Поделиться на других сайтах

А он тебе мешает?

 

Лично мне 2+3 не помогает, посему приходиться извращаться через передачу итераций, но сие редко - шелл рулит, рекомендую посмотреть в сторону шелла.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.