.silent Опубликовано 11 Февраля 2006 Жалоба Поделиться Опубликовано 11 Февраля 2006 Есть скрипт, который выполняет какую-то длительную операцию, продолжающуюся некоторое неизвестное заранее время.Можно каким-либо образом во время этой операции подавать какие-то признаки жизни или еще что-нибудь делал, чтобы сервер не выдал "Gateway timeout".Может, как-нибудь такая штука делается? или это вообще не то, о чем я думаю? или можно как-нить расширить это время до таймаута без участия хостера? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Loh_Ness Опубликовано 11 Февраля 2006 Жалоба Поделиться Опубликовано 11 Февраля 2006 мну через echo вставляя его в наиболее трудных местах Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
.silent Опубликовано 11 Февраля 2006 Автор Жалоба Поделиться Опубликовано 11 Февраля 2006 серверу пофиг на такие признаки жизни.в моем случае, по крайней мере. случай - посылка файла на ftp в асинхронном (т.е. в процессе upload'а могу что-то сделать) режиме сервером. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Loh_Ness Опубликовано 11 Февраля 2006 Жалоба Поделиться Опубликовано 11 Февраля 2006 мы не туда едем, вернее смотрим, вы беспокоитесь времен исполнения скрипта или аплоадом ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
d1pro Опубликовано 11 Февраля 2006 Жалоба Поделиться Опубликовано 11 Февраля 2006 Gateway timeout кстати не сервер, а шлюз выдает (что следует из слова Gateway). Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
.silent Опубликовано 11 Февраля 2006 Автор Жалоба Поделиться Опубликовано 11 Февраля 2006 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 );причем, иногда срабатывает, иногда — нет Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 12 Февраля 2006 Жалоба Поделиться Опубликовано 12 Февраля 2006 PHP даёт определённое время скрипту на выполнение. Эта величина регулируется в php.ini и составляет по умолчанию 30-ть секунд.По истечению этого времени сервер даст атлуп. Браузер также может дать атлуп по истчению таймаута. Это настраивается уже отдельно и не представляет интереса, т.к. настраивается каждым в отдельности. Что касается стороны сервера, то можно 1) увеличить этот период. Но это подходит только для заранее известного максимального времени работы скрипта. Минусами является то, что это значение может изменять только хостер. Ещё одним минусом является то что, сменив хостера, вы будете опять зависимы от этого числа.2) использовать директиву set_time_limit() для указания максимального времени. Если будет указан 0, тогда php не будет контролировать время вообще. Т.е. страница зависнет и обновится после окончания работы. Однако это не спасёт от атлупа самого браузера.3) использовать директиву ignore_user_abort()она позволяет продолжать выполнение скрипта, даже если пользователь закрыл окно браузера, дав понять таким образом скрипту, что далее выполнять скрипт уже не надо. Совмещение двух директив из пп. 2 и 3 даст желаемый результат.А вообще скрипты, которые неизвестно сколько будут выполняться, нужно делать на перле. Например, всякие индексаторы. Что касается признаков жизни (т.е. например, прогресс), это можно сделать только запуском с восстановлением работы. Также как сделаны все перебиратели паролей. Т.е. запускается определённый скрипт с циклом, перед тем как истекут стандартные 30-ть секунд, он запоминает текущее значение итерации и перезапускает скрипт, передав в качестве параметра это число. Скрипт на старте анализирует это число. Если его нет, значит это начало работы. Если оно есть, то он как-то визуализирует текущий прогресс, основываясь на этом числе и продолжает выполнять цикл далее в течение следующих 30-ти секунд и т.д., пока цикл не закончится.В вашем случае нужно перед выходом запоминать текущую позицию в файле, закрывать его, а потом, при перезапуске делать seek на зампоненную позицию + 1. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
.silent Опубликовано 12 Февраля 2006 Автор Жалоба Поделиться Опубликовано 12 Февраля 2006 о ужос 8)спасибо большое за информацию, попробую Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
профф Опубликовано 12 Февраля 2006 Жалоба Поделиться Опубликовано 12 Февраля 2006 echo "sdfsfsdf";flush(); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
.silent Опубликовано 12 Февраля 2006 Автор Жалоба Поделиться Опубликовано 12 Февраля 2006 причем тут флаш? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 12 Февраля 2006 Жалоба Поделиться Опубликовано 12 Февраля 2006 А он тебе мешает? Лично мне 2+3 не помогает, посему приходиться извращаться через передачу итераций, но сие редко - шелл рулит, рекомендую посмотреть в сторону шелла. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.