曾经测试过file_get_contents函数的post实现,现在又想知道file_get_contents 能否实现http的长连接,测试代码:
<?php
$url = "http://phpor.net/";
$opts = array(
‘http’=>array(
‘protocol_version’=>"1.1",
)
);
$context = stream_context_create($opts);
echo strlen( file_get_contents($url,false,$context))."\n";
echo strlen( file_get_contents($url,false,$context))."\n";
?>
该脚本将产生异常,在Linux上执行将是段错误。
下面脚本可以正常输出:
<?php
$url = "http://phpor.net/";
$opts = array(
‘http’=>array(
‘protocol_version’=>"1.1",
‘connection’=>‘close’
)
);
$context = stream_context_create($opts);
echo file_get_contents($url,false,$context)."\n";
?>
但是这时我们将发现输出的东西比网页的内容多一些,那是trunked编码,这说明file_get_contents更本就不识别chunked编码,所以file_get_contents 根本就没法实现长连接。
当然可以用curl实现:
<?php
$url = "http://phpor.net/";
$ch = curl_init();
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_0);
curl_setopt($ch, CURLOPT_URL, $request);
$res = curl_exec($ch);
echo $res;
curl_close($ch);
?>