高效操作大型CSV 檔案:處理3000 萬個字元的字串
操作大型CSV 時遇到「記憶體不足」錯誤通過Curl 下載的檔案。該檔案包含大約 3050 萬個字符,嘗試使用“r”和“n”將其拆分為行數組會由於內存消耗過多而失敗。為了避免分配錯誤,請考慮替代方法:
串流資料而不寫入檔案:
利用CURLOPT_FILE 選項將資料直接串流到自訂流包裝器中,而不是寫入一個檔案。透過定義自己的流包裝器類,您可以在資料塊到達時對其進行處理,而無需分配過多的記憶體。
示例流包裝器類:
class MyStream { protected $buffer; function stream_open($path, $mode, $options, &$opened_path) { return true; } public function stream_write($data) { // Extract and process lines $lines = explode("\n", $data); $this->buffer = $lines[count($lines) - 1]; unset($lines[count($lines) - 1]); // Perform operations on the lines var_dump($lines); echo '<hr />'; return strlen($data); } }
註冊流包裝器:
stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");
使用流包裝器配置Curl:
$fp = fopen("test://MyTestVariableInMemory", "r+"); // Pseudo-file written to by curl curl_setopt($ch, CURLOPT_FILE, $fp); // Directs output to the stream
這種方法可讓您增量地處理資料塊,避免記憶體分配並使其可以對大字串進行操作。
其他注意事項:
以上是如何高效處理3000萬字符的大型CSV檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!