【问题标题】:Fatal error: Allowed memory size of 1920991232 bytes exhausted致命错误:允许的内存大小为 1920991232 字节已用尽
【发布时间】:2014-01-13 10:09:34
【问题描述】:

我用 PHP 编写了一些代码来读取 CSV 文件:

while (!feof($file_handle)) 
{
    $csv=fgetcsv($file_handle, 10024);
    if(is_array($csv))
    {
        $csv=array_slice($csv, 1);
        $csvfile[]=$csv;
    }
}

当我运行它时,我得到了这个错误:

致命错误:允许的内存大小为 1920991232 字节已用尽(试图分配 e 10025 字节)

我在代码的开头添加了ini_set('memory_limit', '10024M');,我也在php.ini文件中增加了memory_limit,但它给出了同样的错误。

有人可以帮忙吗?

【问题讨论】:

  • 您绝对确定需要在处理数据之前将完整的文件读取/解析为数组?
  • 除非我不会将整个文件加载到内存中,请检查您是否安装或编译了 suhosin 并启用了suhosin,如果是,请检查这是否限制了您的内存。
  • @volkery:我正在逐行读取并将其放入数组中,以便以后可以使用该数组,文件大小为 20MB。
  • @t.niese。你能告诉我如何检查是否安装了 suhosin 或没有安装或遵守 suhosin 吗?
  • 例如检查 php info 的输出并在那里搜索 suhosin

标签: php csv memory-limit


【解决方案1】:

请注意,要没有内存限制,请将此指令设置为 -1。 ini_set('memory_limit', '-1');

参考:http://in3.php.net/manual/en/ini.core.php#ini.memory-limit

然后重启apache试试;)

【讨论】:

  • 嘿,很棒的收获。我什至没有想过要这样做。不过需要注意的是,代码是用 PHP 编写的,因此在执行此操作时不需要重新启动 Apache。
猜你喜欢
  • 2014-04-07
  • 2016-09-24
  • 2012-12-27
  • 2011-02-23
  • 2016-04-13
  • 2017-11-06
  • 2015-07-06
  • 2018-05-19
  • 2016-11-10
相关资源
最近更新 更多