千家信息网

PHP中如何实现fwrite与file_put_contents性能测试

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章将为大家详细讲解有关PHP中如何实现fwrite与file_put_contents性能测试,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。function
千家信息网最后更新 2025年02月01日PHP中如何实现fwrite与file_put_contents性能测试

这篇文章将为大家详细讲解有关PHP中如何实现fwrite与file_put_contents性能测试,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

1.测试file_put_contents

复制代码 代码如下:


$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
999995:98xDtLjaeD8MG9ywifegZvRRQzVBZbbw,234223,0.13
999996:98xDtLjaeD8MG9ywifegZvRRQzVBZbbw,84947,0.79
999997:98xDtLjaeD8MG9ywifegZvRRQzVBZbbw,6489,0.38

2.测试fwrite

复制代码 代码如下:


$userCount = 1000;
$itemCount = 1000;
$file = 'ratings.txt';
file_exists($file) &&unlink($file);

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

$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);
fwrite($fp, $line);
$k++;
}
}
if ($fp) @fclose($fp);
$timeEnd = microtimeFloat();
echo sprintf("Spend time: |%s| second(s)\n", $timeEnd -$timeStart);
?>

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

用fwrite写入的数据是完整的
999997,QOvcZYFJFlFHjiGyGxAc615kOXdX3Yii,246982,0.03
999998,QOvcZYFJFlFHjiGyGxAc615kOXdX3Yii,240160,0.39
999999,QOvcZYFJFlFHjiGyGxAc615kOXdX3Yii,46296,0.61
1000000,QOvcZYFJFlFHjiGyGxAc615kOXdX3Yii,26211,0.14

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

关于"PHP中如何实现fwrite与file_put_contents性能测试"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

测试 代码 数据 篇文章 性能 不错 文件 时间 更多 结果 速度 实用 重要 个人 个人电脑 内容 只有 差距 建议 文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 海康存储服务器管理口地址 服务器域名没有注册能不能用 日本软件开发上班族工资 神州泰岳中标网络安全 数据库总是被停 浙江网络技术产品介绍 专科本科软件开发 房山区软件开发公司 我与网络安全同行的口号 网络安全教育团日活动黑板 餐饮管理数据库 服务器开机自启 数据库设计表的时候需要注意什么 网吧服务器配置与管理论文 网络安全专科学历 北京文档软件开发价格行情 王者荣耀登录服务器怎么删除 数据库中怎么设置字段的大小 php远程连接mssql数据库 手机个人热点的网络安全密钥 信息处理员软操作题考不考数据库 北京瑞兆世纪网络技术有限公司 美国突袭德国没收服务器 服务器时间比现实慢 数字科技互联网金融 表格怎么设置不显示数据库 数据库底层构造原理 滁州游戏服务器市场前景如何 乡政府机关网络安全 陆洪社区 网络安全
0