Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中读取6MB csv文件-内存耗尽_Php_File_Csv_Memory_Import - Fatal编程技术网

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

在PHP中读取6MB csv文件-内存耗尽,php,file,csv,memory,import,Php,File,Csv,Memory,Import,我正在尝试使用PHP打开/读取6MB CSV文件,如下所示: $lines=file(“/path/to/my/file.csv”) 但我得到了以下错误: PHP致命错误:第488行/path/to/PHP_file.PHP中允许的内存大小为1073741824字节(尝试分配6461150字节) 如您所见,我们的PHP内存设置设置为1GB(专用服务器,不受任何共享主机包等的限制) 我的问题是,当读入变量(数组)时,6MB的CSV文件是否真的要使用1GB以上的CSV文件。我只是有点困惑,因为我确信

我正在尝试使用PHP打开/读取6MB CSV文件,如下所示:

$lines=file(“/path/to/my/file.csv”)

但我得到了以下错误:

PHP致命错误:第488行/path/to/PHP_file.PHP中允许的内存大小为1073741824字节(尝试分配6461150字节)

如您所见,我们的PHP内存设置设置为1GB(专用服务器,不受任何共享主机包等的限制)

我的问题是,当读入变量(数组)时,6MB的CSV文件是否真的要使用1GB以上的CSV文件。我只是有点困惑,因为我确信我以前用PHP打开过更大的CSV文件,在这个服务器上没有问题


应该不会有什么不同,但是我们在Ubuntu 12.04服务器上使用PHP 5.3

尝试重新启动apache服务器。

您应该逐行处理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()容易得多。

这是脚本唯一要做的事情吗?您需要在内存中保存完整文件有什么原因吗?脚本以前确实做过一些事情(大到可以在这里发布整个内容),但这是它失败的原因。我会快速浏览一遍,看看是否还能发现任何可能“浪费”内存的东西。我们在文件中循环,每行都做一些基本的处理。调用
http://uk1.php.net/memory_get_usage
文件之前
行可能有助于找到它。谢谢。我取消设置了一些在调用之前不再需要的变量,现在它工作正常:)根据
内存使用情况
,在调用之前,它仍然使用了近1GB的内存。:/所以需要研究一下。但它需要在足够的限制下才能工作。再次感谢!检查我的解决方案,其中包括一些比较,也包括生产服务器。除非我真的需要,否则我真的不想解雇几百个用户。如果你能建议任何方法,看看这是否有助于事先(查看总使用内存等),然后我会有兴趣研究这一点。