php

位置:IT落伍者 >> php >> 浏览文章

PHP中fwrite与file


发布日期:2022年08月24日
 
PHP中fwrite与file
这里测试的是往文件中写一百万行记录如果数据量很小比如条左右的记录可能差距不大

function microtimeFloat() {
list($usec$sec) = explode(" " microtime());
return((float)$usec + (float)$sec);
}

测试file_put_contents

复制代码 代码如下:
<?php
$userCount = ;
$itemCount = ;
$file = ratingstxt;
file_exists($file) &&unlink($file);

$timeStart = microtimeFloat();
for ($i = ; $i < $userCount; $i++) {
$uid =random();
for ($j = ;$j < $itemCount; $j++) {
$itemId = mt_rand( );
$rating = $j == ? : mt_rand( ) / ;
$line = sprintf("%s%d%s\n" $uid $itemId $rating);
file_put_contents($file $line FILE_APPEND);
}
}
$timeEnd = microtimeFloat();
echo sprintf("Spend time: |%s| second(s)\n" $timeEnd $timeStart);
?>

测试结果:
测试过程中出现了打开文件的错误而且程序执行完成以后写入的数据不完整只有漏了最重要的一点是时间花了秒多而用fwrite只花了秒多的时间差距还是不小的

D:\myphp\research>php testphp
PHP Warning: file_put_contents(ratingstxt): failed to open stream:Permission
denied in D:\myphp\research\testphp on line

Warning: file_put_contents(ratingstxt): failed to open stream:Permission denie
d in D:\myphp\research\testphp on line
Spend time: ||second(s)


:xDtLjaeDMGywifegZvRRQzVBZbbw
:xDtLjaeDMGywifegZvRRQzVBZbbw
:xDtLjaeDMGywifegZvRRQzVBZbbw
:xDtLjaeDMGywifegZvRRQzVBZbbw

测试fwrite

复制代码 代码如下:
<?php
$userCount = ;
$itemCount = ;
$file = ratingstxt;
file_exists($file) &&unlink($file);

$fp = @fopen($file ab);
if (!$fp) die("Open $file failed");

$timeStart = microtimeFloat();
for ($i = ; $i < $userCount; $i++) {
$uid =random();
for ($j = ;$j < $itemCount; $j++) {
$itemId = mt_rand( );
$rating = $j == ? : mt_rand( ) / ;
$line = sprintf("%s%d%s\n" $uid $itemId $rating);
fwrite($fp $line);
$k++;
}
}
if ($fp) @fclose($fp);
$timeEnd = microtimeFloat();
echo sprintf("Spend time: |%s| second(s)\n" $timeEnd $timeStart);
?>

测试结果:
写一百万行记录秒左右写完对于PHP来说速度算不错了这是在我的个人电脑上面测试的如果在生产机上测试可能速度还要快一些
D:\myphp\research>php testphp
Spend time: ||second(s)

用fwrite写入的数据是完整的
QOvcZYFJFlFHjiGyGxAckOXdXYii
QOvcZYFJFlFHjiGyGxAckOXdXYii
QOvcZYFJFlFHjiGyGxAckOXdXYii
QOvcZYFJFlFHjiGyGxAckOXdXYii

总结
如果要往文件里面写入大量的数据则推荐用fwrite不要用file_put_contents在高并发的请求中也建议用fwrite

上一篇:学习PHP重定向的三种方法

下一篇:php中抽象类和接口的概念以及区别