Ответ 1
Вы устанавливаете таймаут чтения с помощью 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()