PHP在Foreach中耗尽内存

时间:2016-08-02 19:29:06

标签: php memory memory-management

我因错误消息而遭受经典内存耗尽

  

致命错误:允许的内存大小为1073741824字节耗尽(尝试分配11198913字节)

我已经读过它的内容:I'm using too much RAM memory。我还尝试在循环结束时添加gc_collect_cycles而没有运气,最后我读到了setting variables to nullnot unset。问题是我不确定我需要在这里取消设置。

考虑以下脚本

var selectInputIds = ['fruits', 'car'];
var textInputIds = ['veggie', 'number'];

function setButtonState() {
    var hasVal = function(arr) {
    for(var i = 0; i < arr.length; i++) {
        if(document.getElementById(arr[i]).value) {
        return true;
      }
    }
    return false;
  };
    var hasSelectValue = function () {
        return hasVal(selectInputIds);
    }
  var hasTextValue = function () {
    return hasVal(textInputIds);
  }
    var theButton = document.getElementById('search');
  var s = hasSelectValue();
  var t = hasTextValue();
    theButton.disabled = ((s && t) || (!t && !s)); // you can do this bit smarter, but this is explicit
}

(function attachStuff (arr, evt) {
  function listenIn(arr, evt) {

   for(var i = 0; i < arr.length; i++) {
    document.getElementById(arr[i]).addEventListener(evt, setButtonState);
   }
  }
  listenIn(selectInputIds, 'change');
  listenIn(textInputIds, 'keyup');

}())

public function run_all() { $accounts = $this->websiteSettings->all(); foreach ($accounts as $websiteAccount) { try { $this->run($websiteAccount); } catch (Exception $e) { $ticket = new Ticket(); $ticket->priority = Ticket::PRIORITY_HIGH; $ticket->status = Ticket::STATUS_OPEN; $ticket->summary = 'Error'; $ticket->message = $e->getMessage(); $ticket->create(); } } } 返回布尔值,但我并不关心它,因为Cron正在调用此脚本,每当出现错误时,我都会保存一张票据供别人分析。所以我不会在任何地方存储退货。我知道内心深处$this->run使用的内存有点过多,但每次运行最多只使用$this->run()。我的问题是这个每周脚本将在大约100条记录上运行,并且每次运行时,正在使用的RAM都没有被清除。

底线是:我是否可以清除循环结束时100MB ~ 200MB使用的一切?如果是这样,怎么样?

修改

以下是$this->run方法。

run

0 个答案:

没有答案