美文网首页
PHP yield 读取大文件

PHP yield 读取大文件

作者: 程序员有话说 | 来源:发表于2020-10-13 09:27 被阅读0次
优化下读取大文件,在 PHP 读取大文件的时候,经常会出现内存不足的情况,如果文件过大的话,没法一次读取完,今天采用  `yield` 来实现大文件的读取。
  • 传统方式
function readLocalFile($fileName)
{
  $handle = fopen($fileName, 'r');
  $lins = [];
  while (!feof($handle)) {
      $lines[] = fgets($handle);
  }
  fclose($handle);
  return $lines;
}
  • 使用yield 特性读取文件
function readYieldFile($fileName)
{
  $handle = fopen($fileName, 'r');
  while (!feof($handle)) {
      yield fgets($handle);
  }
  fclose($handle);
}
  • 辅助函数

为了便于测试,我们写一个读取内存的辅助函数

function formatBytes($bytes)
{
  if ($bytes < 1024) {
      return $bytes . "b";
  } else if ($bytes < 1048576) {
      return round($bytes / 1024, 2) . "kb";
  }
  return round($bytes / 1048576, 2) . 'mb';
}
  • 测试
# 第一种
readLocalFile('./test.txt');
echo formatBytes(memory_get_peak_usage());  // 结果为 7.59mb

# 第二种
$lines = readYieldFile('./test.txt');
foreach ($lines as $row) {}
echo formatBytes(memory_get_peak_usage());  // 结果为 137.79kb

相关文章

  • PHP yield 读取大文件

    传统方式 使用yield 特性读取文件 辅助函数 为了便于测试,我们写一个读取内存的辅助函数 测试

  • PHP生成器yield

    yield比较适合计算大量的数据,PHP代码运行时节省大量的内存。 官方实例(生成器读取大文件): functio...

  • java操作文件

    优雅读取文件 优雅的写入文件 读取大文件

  • php yield

  • PHP入门

    、 PHP 文件打开/读取/读取/创建/写入

  • 读取大文件

    with open(filename, 'rb') as f:for line in f:

  • 5、GeoTrellis-读取栅格文件

    读取单波段的栅格 读取多波段栅格 使用流读取栅格 通过流读取的tif,单个小文件可以完整的读取,大文件则Java虚...

  • 笔记

    一 、PHP上传大文件配置修改1、php.iniupload_max_filesize,post_max_size...

  • python 读取大文件,避免内存溢出

    ####python读取大文件 最近在学习python的过程中接触到了python对文件的读取。python读取文...

  • php 上传大文件注意事项

    php 上传大文件注意事项 php.ini 参数修改 post_max_size upload_max_files...

网友评论

      本文标题:PHP yield 读取大文件

      本文链接:https://www.haomeiwen.com/subject/oogmpktx.html