3,000 万という膨大な文字列の分析
大量のデータを扱う場合、「メモリ不足」エラーが発生すると混乱する可能性があります。次のシナリオを考えてみましょう。curl を使用して約 3,050 万文字の CSV ファイルを取得しています。 r と n による分解などの一般的な方法を使用して、このデータを行の配列に分割しようとすると、恐ろしいメモリ割り当てエラーが発生します。ここで疑問が生じます: 大量のデータを効率的に操作しながら、このようなエラーを回避するにはどうすればよいですか?
メモリ割り当てエラーを回避するための戦略
前の回答で鋭敏に指摘したように:
代替アプローチ: カスタム ストリーム ラッパーの採用
CURLOPT_FILE はデータをファイルに書き込むことで問題を効果的に解決しますが、特定のシナリオではメモリ内処理が必要になる場合があります。このような場合、カスタム ストリーム ラッパーを実装することで実行可能な解決策が得られます。
ストリーム ラッパーの例:
class MyStream { protected $buffer; function stream_open($path, $mode, $options, &$opened_path) { return true; } public function stream_write($data) { $lines = explode("\n", $data); $lines[0] = $this->buffer . $lines[0]; $this->buffer = $lines[count($lines)-1]; unset($lines[count($lines)-1]); // Perform your processing here var_dump($lines); echo '<hr />'; return strlen($data); } }
ストリーム ラッパーの登録:
stream_wrapper_register("test", "MyStream");
Curl との組み合わせ:
// Configure curl using CURLOPT_FILE curl_setopt($ch, CURLOPT_FILE, fopen("test://MyTestVariableInMemory", "r+")); // Execute curl to retrieve data from the source curl_exec($ch); // Close the stream fclose($fp);
カスタム ストリーム ラッパーを採用することで、大きなデータ セットを管理可能なチャンクで処理することができます。メモリ割り当てエラー。この方法では、データが到着したときに処理できるため、効率的なメモリ使用が保証されます。
以上が3,000 万もの膨大な文字列をメモリ不足にせずに処理するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。