【发布时间】:2014-04-28 16:05:35
【问题描述】:
我正在尝试使用 PHP 打开/读取一个 6MB 的 CSV 文件,如下所示:
$lines = file("/path/to/my/file.csv");
但我收到以下错误:
PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 6461150 bytes) in /path/to/php_file.php on line 488
如您所见,我们的 PHP 内存设置为 1GB(专用服务器,不受任何共享主机包等限制)。
我的问题是 6MB CSV 文件 真的在读入变量(数组)时是否应该使用超过 1GB。我只是有点困惑,因为我确定我之前用 PHP 打开过较大的 CSV 文件,在这台服务器上没有问题。
应该没什么区别,但我们在 Ubuntu 12.04 服务器上使用 PHP 5.3。
【问题讨论】:
-
这是脚本在做的唯一事情吗?您是否有理由需要内存中的完整文件?
-
脚本之前确实做了一些事情(大到在这里发布整个事情),但这是它失败的地方。我会快速浏览一下,看看我是否能发现其他任何可能“浪费”内存的东西。我们正在遍历文件,对每一行进行一些基本处理。
-
在
file行之前调用http://uk1.php.net/memory_get_usage可能有助于追踪它。 -
谢谢。我取消了一些在调用之前不再需要的变量,现在它工作正常 :) 根据
memory_get_usage:/ 所以需要在调用之前以某种方式使用近 1GB 的内存。但它需要在足够的限制下才能工作。再次感谢! -
在stackoverflow.com/a/22744300/2037323查看我的解决方案,其中还包括一些比较
标签: php file csv memory import