Php 缓存大型阵列会导致内存耗尽
所以我试图在文件中缓存一个数组,并在其他地方使用它 import.php 现在,我将recordset.php包含在某处.php中,以使用其中存储的数组。当上传的CSV文件有5000行时,它可以正常工作。例如,如果我尝试上传50000行的CSV文件,我会遇到一个致命错误: 致命错误:允许的内存大小67108864字节已用尽,尝试分配79691776字节Php 缓存大型阵列会导致内存耗尽,php,caching,file-upload,multidimensional-array,Php,Caching,File Upload,Multidimensional Array,所以我试图在文件中缓存一个数组,并在其他地方使用它 import.php 现在,我将recordset.php包含在某处.php中,以使用其中存储的数组。当上传的CSV文件有5000行时,它可以正常工作。例如,如果我尝试上传50000行的CSV文件,我会遇到一个致命错误: 致命错误:允许的内存大小67108864字节已用尽,尝试分配79691776字节 我如何修复它,或者是否有一种可能的方法以更方便的方式实现我想要的?说到表演。。。我应该考虑服务器的CPU吗?我已经覆盖了内存限制,并在某处将其设
我如何修复它,或者是否有一种可能的方法以更方便的方式实现我想要的?说到表演。。。我应该考虑服务器的CPU吗?我已经覆盖了内存限制,并在某处将其设置为-1。php有两种方法可以解决此问题: 您需要增加服务器上的memoryRAM,因为内存限制只能使用服务器上可用的内存。看起来PHP的可用内存非常低。 要检查Linux服务器上的总RAM,请执行以下操作:
<?php
$fh = fopen('/proc/meminfo','r');
$mem = 0;
while ($line = fgets($fh)) {
$pieces = array();
if (preg_match('/^MemTotal:\s+(\d+)\skB$/', $line, $pieces)) {
$mem = $pieces[1];
break;
}
}
fclose($fh);
echo "$mem kB RAM found"; ?>
资料来源:
您应该分块解析CSV文件&每次使用unset函数释放占用的内存时。
您的服务器上有多少可用RAM?如何识别它?首先,请尝试phpinfo检查内存限制是否已被覆盖。告诉我您使用的是Linux还是Windows?
ini_set('memory_limit','-1');
include_once("/var/www/html/Samples/test/recordset.php");
print_r($data);
<?php
$fh = fopen('/proc/meminfo','r');
$mem = 0;
while ($line = fgets($fh)) {
$pieces = array();
if (preg_match('/^MemTotal:\s+(\d+)\skB$/', $line, $pieces)) {
$mem = $pieces[1];
break;
}
}
fclose($fh);
echo "$mem kB RAM found"; ?>