Я думаю, что я неправильно понял время ожидания сокета PHP. Я использую get_headers()
, чтобы проверить, отвечает ли сервер быстро. Я хочу дать серверу 15 секунд для ответа, поэтому я использую ini_set('default_socket_timeout', 15)
. Чтобы проверить это, я могу заставить сервер медленно реагировать, используя sleep()
. То есть я говорю
$headers_array = get_headers('example.com/index.php?sleep=25')
с example.com/index.php, содержащим (только) код php
sleep(@$_GET['sleep']);
echo 'After a delay I am now responding';
Я обнаружил, что PHP всегда , кажется, ждет, пока соединение не будет закрыто, прежде чем продолжить. Когда дело доходит до этой точки, если задержка была больше чем default_socket_timeout PHP сообщает
не удалось открыть поток: сбой HTTP-запроса!
и устанавливает $headers_array
в false
. Но существенным моментом является то, что он, кажется, ждет, пока соединение не будет закрыто, прежде чем сделать это. Кроме того, время ожидания закрытия соединения, похоже, зависит от времени выполнения PHP.
Наивно, я бы ожидал, что PHP будет ожидать самое большее default_socket_timeout , прежде чем продолжить, и в течение этого времени не выйдет из бюджета времени выполнения PHP, как установлено с помощью set_time_limit()
. Очевидно, мое понимание неверно.
Суть в том, что у меня есть сервер, который время от времени перегружается и очень медленно отвечает на HTTP-запросы. Я хочу проверить его время отклика с другого сервера. Есть ли простой способ сказать PHP " связаться с этим сервером, но не ждите ответа более 10 секунд "