高效操作大型 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中文网其他相关文章!