Почему это fsockopen
так медленно по сравнению с тем же запросом из браузера?
php fsockopen: 0.254
сек
браузер: 0.070
сек
$time = microtime(true);
if($fp = fsockopen('ssl://domain.com', 443, $errno, $errstr, 20)){
echo "\n".(microtime(true) - $time);
$this->request = 'POST '.$path.' HTTP/1.1'.$crlf
.'Host: '.$this->host.$crlf
.'Content-Type: application/x-www-form-urlencoded'.$crlf
.'Content-Length: '.$content_length.$crlf
.'Connection: Close'.$crlf.$crlf
.$body;
fwrite($fp, $this->request);
while($line = fgets($fp)){
if($line !== false){
$this->response .= $line;
}
}
fclose($fp);
}
echo "\n".(microtime(true) - $time);
0.18865990638733
0.25424790382385
Это может быть проблема с EOF, ваш fopen ждать до истечения времени ожидания.
Попробуйте меньшее время ожидания для более быстрого возврата, но это не элегантное решение.
Другое решение — запросить соединение вручную с помощью bucle, как в следующем примере:
while (!feof($conn)) {
print fgets($conn, 1024);
}
Источник примера:
https://stackoverflow.com/a/1319434/3518053
Я нашел решение здесь