致命错误:内存不足(已分配764801024)(尝试分配20480字节)

时间:2016-10-20 04:08:58

标签: php linux apache memory memory-management

我已经实现了以下所有内容

PHP Fatal error: Out of memory (allocated 1707606016) (tried to allocate 426680697 bytes)

实施上述帖子

中提到的所有解决方案

仍有同样的错误

致命错误:内存不足(已分配764801024)(尝试分配20480字节)

我也尝试将memory_limit设为-1&即使在.htaccess也是如此。

使用https://www.digitalocean.com/

以下是代码

set_time_limit(0);

error_reporting(E_ALL);
ini_set('display_errors', 1);

$file = file_get_contents("test.csv"); // 50MB File on Server

$data = array_map("str_getcsv", preg_split('/\r*\n+|\r+/', $file));

它在最后一行给出错误。在CSV文件中有html标签,我可以通过代码删除。

能够在我的本地上传相同的文件。问题在于Sever。 如何在服务器上上传50MB文件?

目前我正在使用http://erdconcepts.com/dbtoolbox.html CSVSplitter,这是免费的。

1 个答案:

答案 0 :(得分:0)

file_get_contents 将整个文件加载到内存中,从而导致内存问题。

更好的方法是使用流。尝试以这种方式处理 CSV 文件:

$fp = fopen('test.csv', 'r');

if ($fp === false) {
    throw new RuntimeException('file not readable');
}

$data = [];

while (!feof($fp)) {
    $row = fgetcsv($fp);
    $data[] = $row;
}

这样 fgetcsv 一次只读取一行而不是整个文件。