1

stream_get_contents 似乎无法正确处理持久(KeepAlive)连接。它在返回之前等待连接超时。默认情况下,Apache 2.2 的 KeepAliveTimeout 为 5 秒。对此我能做些什么吗?(除了在服务器上禁用 KeepAlive 或使用 protocol_version 1.0)

$opts = array('http' =>
    array(
        'method' => 'GET',
        'protocol_version' => 1.1,
    )
);
$context = stream_context_create($opts);
$stream = fopen('http://google.com', 'r', false, $context);
$metadata = stream_get_meta_data($stream);
$data = stream_get_contents($stream);
fclose($stream);

谢谢。

4

1 回答 1

1
$opts = array('http' =>
    array(
        'method' => 'GET',
        'protocol_version' => 1.1,
        'header' => 'Connection: close'
    )
);

Connection: close告诉服务器不要使用持久连接,并在发送响应后断开 TCP 连接。

这是HTTP/1.1 标准的一部分,正如PHP 手册所说:

如果 [protocol_version] 设置为 1.1,则您有责任遵守 1.1。

于 2012-06-22T20:52:40.550 回答