【发布时间】:2009-08-10 14:19:07
【问题描述】:
我正在尝试读取一些大型文本文件(50M-200M 之间),进行简单的文本替换(基本上我所拥有的 xml 在一些常规情况下没有被正确转义)。这是该函数的简化版本:
<?php
function cleanFile($file1, $file2) {
$input_file = fopen($file1, "r");
$output_file = fopen($file2, "w");
while (!feof($input_file)) {
$buffer = trim(fgets($input_file, 4096));
if (substr($buffer,0, 6) == '<text>' AND substr($buffer,0, 15) != '<text><![CDATA[')
{
$buffer = str_replace('<text>', '<text><![CDATA[', $buffer);
$buffer = str_replace('</text>', ']]></text>', $buffer);
}
fputs($output_file, $buffer . "\n");
}
fclose($input_file);
fclose($output_file);
}
?>
我没有得到的是,对于最大的文件,大约 150mb,PHP 内存使用量在失败之前超出了图表(大约 2GB)。我认为这是读取大文件的最节省内存的方法。是否有一些我错过的方法对记忆更有效?也许某些设置在应该收集时将其保存在内存中?
换句话说,它不工作,我不知道为什么,据我所知,我没有做错事。我有什么方向可以走吗?感谢您的任何意见。
【问题讨论】: