file_get_contents 与 http1.1

曾经测试过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 
strlenfile_get_contents($url,false,$context))."\n"
;
echo 
strlenfile_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($chCURLOPT_URL$request
);                                                      
$res curl_exec($ch
);
echo 
$res
;
curl_close($ch
);

?>

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据