首页 > 解决方案 > 文件内容未读完整

问题描述

我有一个文本文件,当前有 9130 行,我读取并解析了一个关键字。今天我检测到文件没有读取完整,我想知道为什么?

php 版本:ubuntu 上的 PHP 5.5.9(我知道它是旧版本)

使用 file() 读取文本文件

private function findTodoOld(  ) {
    $lines = file( $this->localFilename, FILE_SKIP_EMPTY_LINES );

    $matchedLines = array(  );
    foreach( $lines as $line ) {
        $pattern = '@todo';
        if ( strpos( $line, $pattern ) !== false ) {
            array_push( $matchedLines, $line );
        }
    }
    return $matchedLines;
}

使用 fopen() 读取文本文件

private function findTodo(  ) {
    $matchedLines = array(  );

    $handle = fopen($this->localFilename, "r");
    if ($handle) {
        while (($line = fgets($handle)) !== false) {
            // process the line read.
            if ( strpos( $line, "@todo" ) !== false ) {
                array_push( $matchedLines, $line );
               }
        }

        fclose($handle);
    } 
    return $matchedLines;
}

两种方法都得到相同的结果:

fopen在 PHP 7.1.16(在 OSX 上)使用相同的文本文件运行该方法可以正常工作。读取所有行,$matchesLines包含 1187 个条目。

我的假设:它与记忆有关。在 ubuntu 机器上,php 的 memory_limit 为 128 M,这足以让我处理一个文本文件。

知道如何处理文件的完整内容吗?

有趣的是我如何分析为什么第 9100 行没有完整读取。

标签: phpfilefopen

解决方案


推荐阅读