Всем добрый день! Код (Text): <?php $q = ''; $q .= "GET / HTTP/1.1\r\n"; $q .= "Host: yandex.ru\r\n"; $q .= "Connection: keep-alive\r\n"; $q .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n"; $q .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36\r\n"; $q .= "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4\r\n\r\n"; $f = fsockopen('yandex.ru', 80, $errno, $errstr); fwrite($f, $q); if(!empty($errstr)) exit($errstr); $response = ''; while($d = fread($f, 4096)) { $response .= $d; } echo $response; error_log('OK!'); При запуске скрипта через браузер, он работает (или висит) 60 сек, затем мой сервер выдаёт заголовок "504 Gateway Time-out nginx" и всё. НО: в логе я вижу 'OK!', т.е. скрипт на этом не останавливается. Хочу также отметить, что с некоторыми сайтами fsockopen всё же нормально работает без этой ошибки. Пробовал установить default_socket_timeout в 5 сек и это помогало, причём, скрипт работал ровно столько секунд, сколько было в default_socket_timeout, и нормально возвращался ответ сайта, к которому обращаются. Хотя если указать default_socket_timeout 60 и более - опять ошибка! НО: если заменить Код (Text): while($d = fread($f, 4096)) { $response .= $d; } на Код (Text): while(!feof($f)) { $response .= fread($f, 4096); } PHP, игнорируя default_socket_timeout, выполняется 60 сек и возвращает "504 Gateway Time-out nginx". Пробовал обращаться к сайту не по домену, а по ip, и это помогло и всё стало работать нормально. В чём причина такого поведения php?