操作3000 萬個字串:避免記憶體分配錯誤
在下列情況下,使用curl 從供應商擷取CSV 資料來源會擷取CSV 資料來源會擷取CSV 資料來源帶來挑戰處理如此大的檔案大小。由於大小巨大(大約 3050 萬個字元),透過分隔符號(例如 r 和 n)分解內容的常見方法會導致「記憶體不足」錯誤。本文探討了解決此問題的替代解決方案。
雖然將整個檔案儲存在記憶體中是不可行的,但一種選擇是使用 CURLOPT_FILE 將內容重定向到磁碟上的檔案中。但是,這種方法可能與所需的工作流程不一致,因為它涉及建立實體文件。
另一個解決方案是定義自訂流包裝器,註冊它,並使用它來代替帶有 CURLOPT_FILE 的真實檔案。此流包裝器可以設計為在數據到達時分塊處理數據,從而有效地避免記憶體分配問題。
為了說明這個方法,讓我們建立一個擴充streamWrapper 類別的MyStream 類別。在stream_write方法中,我們可以利用explode函數從傳入的資料塊中擷取行。由於資料通常以較小的區塊(例如 8192 位元組)接收,因此我們可以對這些較小的部分進行操作,而不是嘗試一次操作整個檔案。
透過使用獨特的協定來註冊此自訂流包裝器(例如,「test」)並在具有CURLOPT_FILE 的curl 配置中使用它,我們可以利用stream_write 方法在收到資料時增量地處理數據。這種技術可以有效地操作大字串,而不會引起記憶體分配錯誤。
以上是如何在不耗盡記憶體的情況下操作 3000 萬個字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!