ファイルを 1 行ずつ読みたいのですが、メモリに完全にロードする必要はありません。
ファイルが大きすぎてメモリで開くことができません。開こうとすると、常にメモリ不足エラーが発生します。
ファイルサイズは1GBです。
ファイルを 1 行ずつ読みたいのですが、メモリに完全にロードする必要はありません。
ファイルが大きすぎてメモリで開くことができません。開こうとすると、常にメモリ不足エラーが発生します。
ファイルサイズは1GBです。
関数を使用してfgets()
、ファイルを 1 行ずつ読み取ることができます。
$handle = fopen("inputfile.txt", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
// process the line read.
}
fclose($handle);
} else {
// error opening the file.
}
if ($file = fopen("file.txt", "r")) {
while(!feof($file)) {
$line = fgets($file);
# do same stuff with the $line
}
fclose($file);
}
バッファリング技術を使用してファイルを読み取ります。
$filename = "test.txt";
$source_file = fopen( $filename, "r" ) or die("Couldn't open $filename");
while (!feof($source_file)) {
$buffer = fread($source_file, 4096); // use a buffer of 4KB
$buffer = str_replace($old,$new,$buffer);
///
}
「while(!feof ... fgets()」に注意してください。fgets はエラー (false を返す) を取得し、ファイルの最後に到達することなく永遠にループする可能性があります。ループが終了したら、feof をチェックしてください。そうでない場合は、エラーが発生しています。
この質問に対する一般的な解決策の 1 つは、改行文字に関する問題です。シンプルな方法で簡単に修正できますstr_replace
。
$handle = fopen("some_file.txt", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
$line = str_replace("\n", "", $line);
}
fclose($handle);
}
配列を返す関数
function read_file($filename = ''){
$buffer = array();
$source_file = fopen( $filename, "r" ) or die("Couldn't open $filename");
while (!feof($source_file)) {
$buffer[] = fread($source_file, 4096); // use a buffer of 4KB
}
return $buffer;
}