在PHP中读取6MB csv文件 - 内存耗尽

时间:2014-03-21 10:29:27

标签: php file csv memory import

我正在尝试使用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

2 个答案:

答案 0 :(得分:1)

您应该逐行处理csv以防止内存耗尽。尝试这样的事情:

$f = fopen("my.csv", "r");
if(true === is_resource($f))
{
    while(false === feof($f))
    {
        $line = fgetcsv($f, 8192);
        // do something with the data here
    }
    fclose($f);
}

使用fgetcsv()解析csv也比使用file()容易得多。

答案 1 :(得分:-1)

尝试重新启动apache服务器。