Тайм-аут curl_exec может завершить сценарий? - PullRequest
0 голосов
/ 14 мая 2010

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

Ответы [ 4 ]

2 голосов
/ 16 мая 2010

Если вы хотите, чтобы процесс мог запускаться и запускаться бесконечно, вам необходимо:

set_time_limit(0);

В противном случае, как только ваш сценарий запустится в течение 30 секунд (или любого другого значения max_execution_time указывает на php.ini) скрипт завершится с ошибкой.Это прерывает все, что может делать скрипт, например, получение возврата от curl_exec().

Предупреждение относительно использования PHP для написания демона (что, по сути, похоже на то, что вы делаете) может бытьнашел здесь .

1 голос
/ 14 мая 2010

Это может быть проблемой с тайм-аутом.

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

curl_setopt($ch, CURLOPT_TIMEOUT, 60);

Затем необходимо установить тайм-аут PHP на значение, превышающее 60 секунд, например,

set_time_limit(90);

Это время ожидания в реальном времени для Windows и время процессора в Unix, поэтому в Unix вам понадобится гораздо меньше. Важно установить тайм-аут PHP в вашем цикле, иначе это общий предел, которого никогда не будет достаточно для вашего бесконечного цикла.

do {
    set_time_limit(90);
    // curl stuff
} while (true);
0 голосов
/ 16 мая 2010

В вашем php вы можете установить переменную CURLOPT_VERBOSE для отслеживания проблемы:

curl_setopt($curl, CURLOPT_VERBOSE, TRUE);

Затем выполняется запись в STDERR или в файл, указанный с помощью CURLOPT_STDERR:

curl_setopt($curl, CURLOPT_STDERR, './path/to/file.log');

Из командной строки вы можете использовать следующие ключи:

* --verbose to report more info to the command line
* --trace <file> or --trace-ascii <file> to trace to a file

Вы можете использовать --trace-time для добавления меток времени к подробным / файловым выводам

0 голосов
/ 14 мая 2010

Убедитесь, что у вас есть набор отчетов об ошибках, поместите его поверх php-файла:

ini_set('display_errors', true);
error_reporting(E_ALL);

Также вы можете продлить время выполнения скрипта:

ini_set('max_execution_time', 50000);
...