读书人

fsockopen,fopen,file_get_contents

发布时间: 2012-12-30 10:43:15 作者: rapoo

fsockopen,fopen,file_get_contents 为什么fsockopen是最快的呢
query_time_class.inc.php

<?php
class query_time_class{

var $start_time;
var $end_time;

function query_start(){

$this->start_time = 0;
$this->end_time = 0;
$this->start_time = $this->get_cur_sec();

}

function query_end(){

$this->end_time = $this->get_cur_sec();

}

function get_query_time(){

$time = floatval($this->end_time - $this->start_time);
$time = sprintf("%01.4f",$time);
return $time;

}

function get_cur_sec(){

list($msec,$sec) = explode(" ", microtime());
$msec = floatval($msec);
$sec = floatval($sec+$msec);
return $sec;

}
function out_put(){

$time = $this->get_query_time();
$output = "执行时间 {$time} 秒";
echo $output;

}

}


?>



执行代码


<?php

include('query_time_class.inc.php');
$query_time_obj = new query_time_class();

$query_time_obj->query_start();
for($ii=0; $ii<10; $ii++) {

fsockopen('www.poco.cn',80, $errno, $errmsg);

}
$query_time_obj->query_end();
echo("fsockfopen:");
$query_time_obj->out_put();

echo("\n");


$query_time_obj->query_start();
for($ii=0; $ii<10; $ii++) {

fopen('http://www.poco.cn',"r");

}
$query_time_obj->query_end();
echo("open:");
$query_time_obj->out_put();
echo("\n");

$query_time_obj->query_start();
for($ii=0; $ii<10; $ii++) {

file_get_contents('http://www.poco.cn');

}
$query_time_obj->query_end();
echo("file_get_contents:");
$query_time_obj->out_put();

?>




执行结果:

---------- run php ----------
fsockfopen:执行时间 0.2349 秒
open:执行时间 0.7909 秒
file_get_contents:执行时间 2.3349 秒

输出完成 (耗时 8 秒) - 正常终止

如题 求高手讲解,先谢谢啦 !
[解决办法]
本帖最后由 xuzuning 于 2012-12-21 10:57:40 编辑 fsockfopen 仅仅是打开连接,当然最快
fopen 本身是文件系统函数,当发现目标文件是 url 时就在内部调用 fsockfopen 多了一套手续所以排在第二
file_get_contents 不仅要检查是否本地文件,还有取回文件内容,又多了套手续,只能屈居第三了

把 file_get_contents 和前两个函数比较,是有失公允的

读书人网 >PHP

热点推荐