本文介绍一种优化 php 文件大小统计性能的方法:先将所有结果暂存于内存字符串,再一次性写入磁盘,避免频繁的 i/o 开销,显著提升执行效率。
在处理大量文件时(例如遍历 img/ 目录下数百个 PNG 图片),原始代码每次循环都调用 fopen("result.txt", "a") 和 fclose(),这会导致多次磁盘 I/O 操作——而磁盘写入远慢于内存操作。即使使用追加模式("a"),PHP 仍需反复定位文件末尾、校验权限、触发系统调用,累积开销明显。
更优方案是:将所有待写内容先拼接至一个 PHP 字符串变量(即“内存缓存”),循环结束后仅执行一次文件写入。以下是改进后的完整示例:
";
$result .= $line . "\n"; // 追加到内存缓冲区(无 I/O)
}
}
// ✅ 仅一次打开、写入、关闭
if (!empty
($result)) {
$fp = fopen("result.txt", "a");
if ($fp) {
fwrite($fp, $result);
fclose($fp);
echo "✅ 所有文件大小已一次性写入 result.txt
";
} else {
echo "❌ 无法打开 result.txt 进行写入,请检查文件权限和路径
";
}
} else {
echo "⚠️ 未找到任何 PNG 文件或无有效文件大小数据
";
}
?>? 关键优化点说明:
⚠️ 注意事项:
综上,该方法以极小改动实现显著性能提升,是 PHP 批量文件处理中的经典 I/O 优化实践。