操作字串超出記憶體限制
處理過大的字串時,例如3000 萬字元的CSV 文件,記憶體分配錯誤可以出現。要解決此問題,請不要將整個字串載入到記憶體中。相反,採用替代策略來處理資料而不超出記憶體限制。
替代方法:
使用流包裝器的範例實作:
class MyStream { protected $buffer; function stream_open($path, $mode, $options, &$opened_path) { // Has to be declared, it seems... return true; } public function stream_write($data) { $lines = explode("\n", $data); $lines[0] = $this->buffer . $lines[0]; $nb_lines = count($lines); $this->buffer = $lines[$nb_lines-1]; unset($lines[$nb_lines-1]); var_dump($lines); // Process data as needed echo '<hr />'; return strlen($data); } } // Register custom stream stream_wrapper_register("test", "MyStream"); // Configure curl with target "file" $fp = fopen("test://MyTestVariableInMemory", "r+"); curl_setopt($ch, CURLOPT_FILE, $fp); // Data will be sent directly to stream curl_exec($ch); curl_close($ch); // Don't forget to close file / stream fclose($fp);
此策略可讓您處理資料在到達時遞增,避免記憶體分配問題。
以上是如何在不超出記憶體限制的情況下處理巨大的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!