php - 文件内容未读完整
问题描述
我有一个文本文件,当前有 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;
}
两种方法都得到相同的结果:
- 第 9100 行的内容未完整读取(以及文件的其余部分)
- 如果我删除第 9100 行,那么新的第 9100 行也不会完整读取(以及文件的其余部分)
- 包含
$matchedLines
1173 个条目。
fopen
在 PHP 7.1.16(在 OSX 上)使用相同的文本文件运行该方法可以正常工作。读取所有行,$matchesLines
包含 1187 个条目。
我的假设:它与记忆有关。在 ubuntu 机器上,php 的 memory_limit 为 128 M,这足以让我处理一个文本文件。
知道如何处理文件的完整内容吗?
有趣的是我如何分析为什么第 9100 行没有完整读取。