猿问

操纵一个长度为3000万个字符的字符串

操纵一个长度为3000万个字符的字符串

我从其他服务器下载CSV文件作为来自供应商的数据馈送。

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

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

echo strlen($contents)和它大约有3050万个字符。

我需要操纵值并将它们插入到数据库中。我需要做些什么来避免内存分配错误?


月关宝盒
浏览 322回答 3
3回答

子衿沉夜

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);然后,一旦保存文件,而不是使用file或file_get_contents函数(将整个文件加载到内存中,再次杀死PHP),使用fopen和fgets一次读取一行文件。
随时随地看视频慕课网APP
我要回答