当前位置: 首页 > 面试题库 >

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

须景辉
2023-03-14
问题内容

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

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

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

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

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


问题答案:

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),请使用fopen和fgets一次读取一行。



 类似资料:
  • 问题内容: 有没有办法在不知道字符串长度的情况下,将一个字符长的字符串切成4个字符串,每个字符长? 例如: 问题答案:

  • 问题内容: 数据如下所示: 我希望它看起来像这样: 摆脱一个或另一个很简单。 这: 给我这样的建议:倡议:可信来源倡议:及时的倡议:数据库规范化 还有这个: 给我这个: 很难弄清楚如何将两者结合起来。 问题答案: 只是使用怎么样? 或者,如果您不知道前缀有多长时间: 这是一个。

  • 要求出字符串的长度(字符的个数),我们可以使用length函数。调用这个函数的语法和我们前面看到的有点不同: int length; length = fruit.length(); 对于这种函数调用,我们称之为在字符串变量fruit上**调用(invoke)**length函数。“调用(invoke)”这个词可能看起来有点奇怪,但是后面我们还会遇到很多在对象上调用函数的例子。 函数调用的语法称

  • 问题内容: 我正在尝试在列数据类型为的表中插入数据。理想情况下,它应该存储8000个以上的字符,但就我而言,它将其减少到8000个字符。 我正在过程中的运行时进行插入查询。下面是该程序正在执行的示例查询。 A,B,C等是示例数据,实际数据将在运行时被标识,实际内容跨越8000个字符。同样,用于存储值的变量也定义为’ ‘ 但是,当我尝试以下查询时,它的确在表中插入了超过8000个字符 我想在尝试用“

  • 本节要介绍一些字符串处理的标准库函数。这里介绍的技术适用于开发文本编辑器、字处理器、桌面排版软件、计算机化打字系统和其他文本处理软件。我们这里使用基于指针的字符串,本书稍后还将介绍把字符串作为成熟的对象。 5.12.1 字符与字符串基础 字符是 C++ 编程语言的基本组件。每个程序都是由一系列字符用有意义的方式组合而成的,计算机将其解释为一系列指令,用来完成一组任务。程序可能包含字符常量(char

  • 我正在努力解决一个关于正则表达式的小问题。 我想用另一个长度相同但字符不同的子字符串替换特定字符的所有奇数长度子字符串。指定字符的所有偶数序列应保持不变。 一个字符串包含字母a、b和y,y的所有奇数长度序列都应替换为z: 另一个可能的例子是: 变成 使用正则表达式匹配所有奇数长度的序列没有问题。 不幸的是,我不知道如何将这些匹配的长度信息合并到替换字符串中。我知道我必须以某种方式使用反向引用/捕获