PHP 中 fwrite 与 file_put_contents 性能测试代码
这里测试的是往文件中写一百万行记录,如果数据量很小,比如
1000 条左右的记录,可能
差距不大
function
microtimeFloat() {
list(
$usec
,
$sec
) =
explode
(" ", microtime());
return
((float)
$usec
+ (float)
$sec
);
}
1.测试
file_put_contents
代码如下
:
<?php
$userCount
= 1000;
$itemCount
= 1000;
$file
= 'ratings.txt';
file_exists
(
$file
) &&unlink(
$file
);
$timeStart
= microtimeFloat();
for
(
$i
= 0;
$i
<
$userCount
;
$i
++) {
$uid
=random(32);
for
(
$j
= 0;
$j
<
$itemCount
;
$j
++) {
$itemId
= mt_rand(1, 300000);
$rating
=
$j
== 0 ? 1 : mt_rand(1, 100) / 100;
$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
);
?>
测试结果
:
测试过程中出现了打开文件的错误,而且程序执行完成以后写入的数据不完整,只有
999997 行,漏了 3 行。最重要的一点是时间花了 307 秒多,而用 fwrite 只花了 10 秒多的时
间,差距还是不小的。
D:\myphp\research>php test2.php
PHP Warning:
file_put_contents
(ratings.txt): failed to open stream:Permission
denied in D:\myphp\research\test2.php on line 79
Warning:
file_put_contents
(ratings.txt): failed to open stream:Permission denie
d in D:\myphp\research\test2.php on line 79
Spend time: |307.0586669445|second(s)
...
999994:98xDtLjaeD8MG9ywifegZvRRQzVBZbbw,167670,0.15