PHPでいくつかの情報を抽出する必要がある1.3GBのテキストファイルがあります。私はそれを研究し、私がする必要があることを行うためのいくつかのさまざまな方法を考え出しましたが、いつものように、どの方法が最善であるか、または私が知らない別のより良い方法が存在するかどうかについて少し明確にした後ですか?
テキストファイルに必要な情報は、各行の最初の40文字だけで、ファイルには約1,700万行あります。各行の40文字がデータベースに挿入されます。
私が持っている方法は以下の通りです。
// REMOVE TIME LIMIT
set_time_limit(0);
// REMOVE MEMORY LIMIT
ini_set('memory_limit', '-1');
// OPEN FILE
$handle = @fopen('C:\Users\Carl\Downloads\test.txt', 'r');
if($handle) {
while(($buffer = fgets($handle)) !== false) {
$insert[] = substr($buffer, 0, 40);
}
if(!feof($handle)) {
// END OF FILE
}
fclose($handle);
}
上記は一度に各行を読み取り、データを取得します。すべてのデータベース挿入を並べ替えて、トランザクションで一度に50回の挿入を実行します。
次のメソッドは実際には上記と同じですが、データを取得file()
する前にすべての行を配列に格納するために呼び出しforeach
ますか?配列には基本的に1700万を超える値があるため、この方法についてはよくわかりません。
別の方法は、ファイルの一部のみを抽出し、未使用のデータでファイルを書き換え、その部分が実行された後、呼び出しを使用してスクリプトをheader
呼び出すことです。
これを最も迅速かつ効率的な方法で行うための最良の方法は何でしょうか?それとも、私が考えていたこれにアプローチするためのより良い方法はありますか?
また、このスクリプトをwampで使用する予定ですが、テスト中にブラウザーで実行すると、スクリプトのタイムアウトを0に設定しても、タイムアウトの問題が発生します。ブラウザーからページにアクセスせずにスクリプトを実行して実行する方法はありますか? ?