Вы устанавливаете read timeout с помощью socket_create_context
.Если страница , к которой вы пытаетесь получить доступ, не существует, то сервер разрешит вам подключиться и выдаст вам 404. Однако, если сайт не существует (не будетразрешить или нет веб-сервера за ним), то file_get_contents()
будет игнорировать тайм-аут чтения, потому что он еще не установил тайм-аут подключения к нему.
Я не думаю, что вы можете установить тайм-аут соединения в file_get_contents
.Недавно я переписал некоторый код для использования fsockopen()
именно потому, что он позволяет указать время ожидания соединения
$connTimeout = 30 ;
$fp = fsockopen($hostname, $port, $errno, $errstr, $connTimeout);
Конечно, переход к fsockopen потребует от вас fread()
из него в цикленемного сочиняя ваш код.Тем не менее, он дает вам больше контроля при обнаружении тайм-аутов чтения при чтении с него, используя stream_get_meta_data()
http://php.net/stream_get_meta_data