您的位置:首页 > 编程语言 > PHP开发

php读写文件比较 (fread,fwrite,file_put_contents,file_get_contents)

2012-04-05 13:32 609 查看
今天发现一个快速开发库叫做kiwiphp,其号称达到原生php 的 60%的处理速度,于是拿来翻阅了一下代码,突然发现在php5.1以后php已提供了非常完整的文件读写函数,无需自行使用fopen,fwrite与 fread等函数,但效率是否真的比使用传统函数高呢?带着这个疑问我做了测试

$round=100;

$mtime = explode(' ', microtime());

$starttime = $mtime[1] + $mtime[0];

for($i=0;$i<$round;$i++){

writetofile("./testwrite","1234567890");

}

$mtime = explode(' ', microtime());

$endtime = $mtime[1] + $mtime[0];

echo "write 1 in :".($endtime-$starttime)."<BR/>";

$mtime = explode(' ', microtime());

$starttime = $mtime[1] + $mtime[0];

for($i=0;$i<$round;$i++){

writetofile("./testwriteappend","1234567890","ab+");

}

$mtime = explode(' ', microtime());

$endtime = $mtime[1] + $mtime[0];

echo "write 2 in :".($endtime-$starttime)."<BR/>";

$mtime = explode(' ', microtime());

$starttime = $mtime[1] + $mtime[0];

for($i=0;$i<$round;$i++){

readstream("./testwriteappend",10,"rb",1024);

}

$mtime = explode(' ', microtime());

$endtime = $mtime[1] + $mtime[0];

echo "read 1 in :".($endtime-$starttime)."<BR/>";

$mtime = explode(' ', microtime());

$starttime = $mtime[1] + $mtime[0];

for($i=0;$i<$round;$i++){

file_put_contents("./testwritef","1234567890", LOCK_EX);

}

$mtime = explode(' ', microtime());

$endtime = $mtime[1] + $mtime[0];

echo "writef 1 in :".($endtime-$starttime)."<BR/>";

$mtime = explode(' ', microtime());

$starttime = $mtime[1] + $mtime[0];

for($i=0;$i<$round;$i++){

file_put_contents("./testwritefappend","1234567890",FILE_APPEND | LOCK_EX);

}

$mtime = explode(' ', microtime());

$endtime = $mtime[1] + $mtime[0];

echo "writef 2 in :".($endtime-$starttime)."<BR/>";

$mtime = explode(' ', microtime());

$starttime = $mtime[1] + $mtime[0];

for($i=0;$i<$round;$i++){

file_get_contents("./testwritefappend",FILE_BINARY,NULL,10,1024);

}

$mtime = explode(' ', microtime());

$endtime = $mtime[1] + $mtime[0];

echo "readf 1 in :".($endtime-$starttime)."<BR/>";

function writetofile($filename,$data,$method="wb+"){

//touch($filename);

$handle=fopen($filename,$method);

if(!$handle){

return false;

}

flock($handle,LOCK_EX);

fputs($handle,$data);

//flock($handle,LOCK_UN);

fclose($handle);

return true;

}

function readstream($filename,$seek=0,$method="rb",$toread=1024){

if($handle=fopen($filename,$method)){

$seek>0 && fseek($handle,$seek);//,SEEK_CUR);

//flock($handle,LOCK_SH);

$size=filesize($filename);

if($size){

$size= $size>$toread ? $toread : $size;

$filedata =fread($handle,$size);

}else{

while(!feof($handle)){

$filedata .=fread($handle,1024);

if(strlen($filedata)>=$toread)

break;

}

}

//flock($handle,LOCK_UN);

fclose($handle);

}

return $filedata;

}


经过反复运行这组函数,我发现其实,php5提供的整合函数并不占多大优势,传统方式偶尔会快过php5提供的整合函数。

其中一组结果

引用

write 1 in :0.0020349025726318

write 2 in :0.0018160343170166

read 1 in :0.00025391578674316

writef 1 in :0.0017929077148438

writef 2 in :0.0018231868743896

readf 1 in :0.00019192695617676

实际上也就快那么0.001,0.0001秒左右。看来php自身的fread,fopen等函数已经非常优秀,即使与C相比也不会相差多少(php5提供的整合函数实际上就是将fopen,fread等过程较由php自身也就是c编写的函数来完成)。

不过减少了很多手工需要些的代码,实在是不错的选择:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐