我已经实现了下面所有的东西
PHP内存不足(已分配1707606016)(尝试分配426680697字节)
实现了上面帖子中提到的所有解决方案
仍然给出相同的错误
致命错误:内存不足(已分配764801024)(试图分配20480字节)
我还尝试将memory_limit
设置为-1
&即使在.htaccess
中也是如此。
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
一次只读取一行,而不是整个文件。