我試圖讀取一些大文本文件(50M-200M之間),做簡單的文本替換(本質上我有幾個沒有正確逃脫的XML,正常情況下)。下面是功能的簡化版本:在失敗之前用PHP解析大文本文件而不殺服務器
<?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)。我認爲這是閱讀大文件的最有效的內存方式。有沒有一些方法可以提高記憶效率?也許有些設置會在應該收集內容時保存在內存中?
換句話說,它不工作,我不知道爲什麼,據我所知我沒有做錯事。任何方向爲我去?感謝您的任何意見。
看看http://stackoverflow.com/questions/1176589/optimizing-php-command-line-scripts-to-process-large-flat-files – ftrotter 2010-08-23 08:16:58