PHP使用迭代器Iterator读取大容量文本文件

用php处理大容量文件,比如内存只有100m,要处理2G的文本文件,php怎么办?

可以通过fgets函数来逐行读取,然后通过Iterator来实现一个迭代器,方便遍历,

分享下代码:

<?php
 
class Reader implements Iterator {
    
    private $num;
    
    private $handler;
    
    public function __construct($file)
    {
        $this->handler = fopen($file, "r");
    }
    
    
    public function __destruct()
    {
        fclose($this->handler);
    }
    
    public function current()
    {
        return fgets($this->handler, 2048);
    }
    
    public function next()
    {
        $this->num++;
    }
    
    public function key()
    {
        return $this->num;
    }
    
    public function valid()
    {
        return !feof($this->handler);
    }
    
    public function rewind()
    {
        fseek($this->handler, 0);
        
        $this->num = 1;
    }
}
 
$file = __FILE__;
 
$reader = new Reader($file);
 
foreach ($reader as $k => $v) {
    echo $k ."\t\t" . $v . "\r\n";
}

 

posted @ 2022-02-23 12:45  冯丙见  阅读(45)  评论(0编辑  收藏  举报