操作字符串超出内存限制
处理过大的字符串时,例如 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中文网其他相关文章!