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


Fatal error: Out of memory (allocated 764801024) (tried to allocate 20480 bytes)

我已经实现了下面所有的东西

PHP内存不足(已分配1707606016)(尝试分配426680697字节)

实现了上面帖子中提到的所有解决方案

仍然给出相同的错误

致命错误:内存不足(已分配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标签,我正在删除的代码。

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

现在我使用http://erdconcepts.com/dbtoolbox.html CSVSplitter这是免费的。

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一次只读取一行,而不是整个文件。

相关文章: