ошибка fsockopen я хочу пропустить - PullRequest
1 голос
/ 29 октября 2009
$sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80), $errno, $errstr, 30);
if (!$sock) return false;

У меня есть список в моей БД для URL, которые я посещаю, и иногда я получаю это:

Я получаю «Неустранимая ошибка: превышено максимальное время выполнения 30 секунд ...»

Ожидается, так как он идет на сайт, который не допускает сокеты или что-то еще.

Как мне пропустить эти плохие сайты, чтобы мой сценарий продолжал работать для других хороших?

Спасибо

Ответы [ 2 ]

1 голос
/ 29 октября 2009

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

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

Кроме того, вы можете использовать set_time_limit(), чтобы увеличить максимальное время выполнения вашего скрипта.

0 голосов
/ 29 октября 2009

Проблема не в тайм-ауте fsocketopen, а в том, что скрипт php достигает максимального времени выполнения, установленного в php.ini, по умолчанию оно установлено равным 30 секундам, если вы запускаете php в качестве модуля apache, проверьте максимальное время выполнения в php.ini, увеличьте его, чтобы получить больше времени выполнения, вы заметите, что опция php.ini для cli отключена по умолчанию.

...