PHP-файл получает содержимое, игнорируя тайм-аут?
$url = 'http://a.url/i-know-is-down';
//ini_set('default_socket_timeout', 5);
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 5,
'ignore_errors' => true
)
)
);
$start = microtime(true);
$content = @file_get_contents($url, false, $ctx);
$end = microtime(true);
echo $end - $start, "n";
ответ, который я получаю обычно 21.232 сегментов, не должно быть около пяти секунд???
разблокирование строки ini_set не помогает вообще.
1 ответов
при установке читать тайм-аут с socket_create_context
. Если страница вы пытаетесь получить доступ, не существует, то сервер позволит вам подключиться и дать вам 404. Однако, если сайт не существует (не будет разрешать или нет веб-сервера за ним), затем file_get_contents()
будет игнорировать тайм-аут чтения, потому что он еще даже не истекло время подключения к нему.
Я не думаю, что вы можете установить тайм-аут соединения в file_get_contents
. Недавно я переписал код на использовать fsockopen()
именно потому, что оно позволяет указать время ожидания подключения
$connTimeout = 30 ;
$fp = fsockopen($hostname, $port, $errno, $errstr, $connTimeout);
конечно, собирается fsockopen потребует от вас тогда fread()
от этого в петлю, слегка compicating код. Это дает вам больше контроля, однако, при обнаружении таймаутов чтения во время чтения из него с помощью stream_get_meta_data()