缓存大型数组会导致内存耗尽


Caching large Array causes memory exhaustion

所以我试图在文件中缓存一个数组,并在其他地方使用它。

import.php

// Above code is to get each line in CSV and put in it in an array 
// (1 line is 1 multidimensional array) - $csv 
$export = var_export($csv, true);
$content = "<?php '$data=" . $export . ";?>";
$target_path1 = "/var/www/html/Samples/test";
file_put_contents($target_path1 . "recordset.php", $content); 

somewhere.php

ini_set('memory_limit','-1');
include_once("/var/www/html/Samples/test/recordset.php");
print_r($data);

现在,我已经在somewhere.php中包含了recordset.php,以使用存储在其中的数组。当上传的CSV文件有5000行时,它可以很好地工作,例如,如果我试图上传有50000行的CSV,我会收到一个致命错误:

致命错误:允许的内存大小67108864字节已用完(试图分配79691776字节)

我该如何修复它,或者有没有可能以更方便的方式实现我想要的东西?说到表演。。。我应该考虑服务器的CPU吗?我已经覆盖了内存限制,并在somewhere中将其设置为-1。php

有两种方法可以解决此问题:

  1. 您需要增加服务器上的内存(RAM),因为memory_limit只能使用服务器上可用的内存。而且您的PHP可用RAM似乎非常低

检查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"; ?>

来源:使用php 获取服务器ram

  1. 你应该解析你的CSV文件块&每次使用CCD_ 2函数释放占用的内存