一尘不染

处理长度为3000万个字符的字符串

php

我正在从另一台服务器下载CSV文件,作为供应商的数据提要。

我正在使用curl获取文件的内容,并将其保存到名为的变量中$contents

我可以很好地达到那部分,但是我尝试通过爆炸\r\n获得行数组,但是失败并出现“内存不足”错误。

echo strlen($contents),大约是3050万个字符。

我需要处理这些值并将它们插入数据库。为了避免内存分配错误,我该怎么办?


阅读 174

收藏
2020-05-26

共1个答案

一尘不染

PHP令人窒息,因为它耗尽了内存。不要使用curl来用文件的内容填充PHP变量,而应使用

CURLOPT_FILE

选项将文件保存到磁盘。

//pseudo, untested code to give you the idea

$fp = fopen('path/to/save/file', 'w');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec ($ch);
curl_close ($ch);
fclose($fp);

然后,保存文件后,不要使用fileor
file_get_contents函数(将整个文件加载到内存中,再次杀死PHP),请使用fopenfgets一次读取一行。

2020-05-26