我已经实现了以下所有内容
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,这是免费的。
答案 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
一次只读取一行而不是整个文件。