php 读超大文件,PHP读取超大文件和超大目录的方法

大文件

$line) {

# 把读取的文件流写成一个新的文件

file_put_contents("copy.zip", $line, FILE_APPEND);

}

function getLines($file) {

$f = fopen($file, "r");

try {

while ($line = fgets($f)) {

yield $line;

}

} finally {

fclose($f);

}

}

foreach (getLines("file.txt") as $n => $line) {

// 只取前五行

if ($n > 5) break;

# 把读取的文件流写成一个新的文件

file_put_contents("copy.txt", $line, FILE_APPEND);

}

大目录

scandir()

读取大目录是不建议使用 scandir() 函数,因为该函数会一次性将 目录下的文件名生成一个数组全部加载到内存中,当目录下的文件较多时会非常危险。

opendir()、readdir()、closedir()

function traverseDir($dir)

{

if (is_dir($dir)) {

if ($handle = opendir($dir)) {

while(($file = readdir($handle)) !== false){

if (in_array($file, [".", ".."], true)) {

continue;

}

yield $file;

}

closedir($handle);

}

}

}

$dir = "sources/";

//echo memory_get_usage() . "

";

foreach (traverseDir($dir) as $fileName)

{

//echo $fileName, "

";

//echo memory_get_usage() . "

";

//echo "--------------------------------

";

file_put_contents($dir . $fileName, $fileName);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值