php读写文件比较 (fread,fwrite,file_put_contents,file_get_contents)
来源:互联网 发布:gfxbench数据库网址 编辑:程序博客网 时间:2024/05/16 05:15
今天发现一个快速开发库叫做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编写的函数来完成)。
不过减少了很多手工需要些的代码,实在是不错的选择:)
- php读写文件比较 (fread,fwrite,file_put_contents,file_get_contents)
- fread/fwrite读写文件
- 读写文件 fread,fwrite
- php写入文件fwrite和file_put_contents函数比较
- 关于php 中file_put_contents 和fwrite file_get_contents和curl
- php中file文件操作函数readfile fread fgets fgetc以及不需要加fopen的file_get_contents file_put_contents file()
- php中file文件操作函数readfile fread fgets fgetc以及不需要加fopen的file_get_contents file_put_contents file()
- C/C++读写文件(fwrite,fread)
- fread()和fwrite()函数读写文件操作
- 使用fread和fwrite函数读写文件
- C语言读写文件 -fopen、fread、fwrite
- c++文件读写之fread和fwrite
- 文件读写结构体信息...fread, fwrite
- fwrite(),fread()读写文件数据块函数
- PHP file_put_contents&file_get_contents的使用
- PHP写入文件用file_put_contents代替fwrite优点多多
- 文件读写操作之一 <二进制读写操作> fwrite与fread
- C 语言 fwrite 和 fread 文件读写操作示例
- 从PHP的模板引擎看Discuz!模板机制
- php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
- ubuntu系统无法识别手机
- vbox中windows主机与Linux虚拟机之间数据共享的几种方式
- 关于php中request的问题
- php读写文件比较 (fread,fwrite,file_put_contents,file_get_contents)
- “磁性” 窗口
- iis write.py
- 【Android】播放视频的简易播放器源码
- PHP判断浏览器类型的代码
- 找不到libstdc++.so.5解决方案
- php生成静态页面的办法
- 如何重置数据库Suppect(置疑)状态
- smarty安装及初级使用