php - 以最有效的方式编写大文件
问题描述
我正在尝试在 php 中编写一个 50+ MB 范围内的文件。
这有点像预期的那样工作,尽管速度很慢。
它运行起来很简单:
$fileAccess = fopen($filename, 'w');
fwrite($fileAccess, $line);
*a lot of lines and loops...*
fclose($fileAccess);
我的问题是。我可以做些什么来优化它。我向文件发送了大约 350000fwrite
条大约 100-10000 个字符的语句,我想知道是否可以做些什么来提高文件生成的效率。是做所有这些小写更好,还是我应该在写之前在内部“缓存”一些内容,或者是否有第三个选项我只是不知道。
我必须降低内存消耗,否则我会遇到服务器限制。
谢谢
解决方案
这可能会帮助你
// Copy big file from somewhere else
$src_filepath = 'http://example.com/all_the_things.txt'; $src = fopen($src_filepath, 'r');
$tmp_filepath = '...'; $tmp = fopen($tmp_filepath, 'w');
$buffer_size = 1024;
while (!feof($src)) {
$buffer = fread($src, $buffer_size); // Read big file/data source/etc. in small chunks
fwrite($tmp, $buffer); // Write in small chunks
}
fclose($tmp_filepath); // Clean up
fclose($src_filepath);
rename($tmp_filepath, '/final/path/to/file.txt');
推荐阅读
- tensorflow - 回归图像以预测标量
- apache-kafka - 防止 KStream 发出旧的未更改的聚合值
- python - 如何记录 ping 的结果?
- python-3.x - 具有这种奇怪行为的 round() 的功能是什么?
- python - 无法让 ForeignKeys 中的相关字段显示在模板中
- node.js - 如何使用 Google Drive API 在团队云端硬盘中创建文件
- python - 用户定义的函数没有循环,我怎样才能让它循环?
- graph-databases - Gremlin:groupCount 之后的除法
- python - 如何获得中间层的输出?
- citrus-framework - 使用 Java DSL TestRunner - 如何在我自己的 Java 代码中访问变量