33554432バイトのメモリサイズが排気可PHPのエラー(93バイトを割り当てしようとしました)

StackOverflow https://stackoverflow.com/questions/2461166

  •  20-09-2019
  •  | 
  •  

質問

私は、次のコードを挿入します:

$counter = 1;
while($_POST['additional_contact1'] != '' || $_POST['additional_contact2'] != '' || $_POST['additional_contact3'] != '') {
  if($_POST['additional_contact' . $counter] != '') {
    $_SESSION['contact'][$counter]['additional_contact'] = $_POST['additional_contact' . $counter];
    $_SESSION['contact'][$counter]['additional_int_prefix'] = $_POST['additional_int_prefix' . $counter];
    $_SESSION['contact'][$counter]['additional_prefix'] = $_POST['additional_prefix' . $counter];
    $_SESSION['contact'][$counter]['additional_first'] = $_POST['additional_first' . $counter];
    $_SESSION['contact'][$counter]['additional_last'] = $_POST['additional_last' . $counter];
  } else {
    $_SESSION['contact'][$counter]['additional_contact'] = null;
    $_SESSION['contact'][$counter]['additional_int_prefix'] = null;
    $_SESSION['contact'][$counter]['additional_prefix'] = null;
    $_SESSION['contact'][$counter]['additional_first'] = null;
    $_SESSION['contact'][$counter]['additional_last'] = null;
  }

$counter++;
}

私はこのエラーを受信した:の致命的なエラー:排出33554432バイトの許容メモリサイズ(割り当てしようとした93バイト)

私は、ini_set()でメモリ制限を増加させようとしたが、それはまだ96Mで動作しません。私はそれはとても多くのメモリを必要とするために私のコードで間違って何をしているのですか?どのように私はこの問題を解決することができますか?

役に立ちましたか?

解決

他の人が言うように、

、あなたは無限ループを作成しました。 forループの代わりに使用します。

for($counter = 1; $counter <= 3; $counter++) {
  if($_POST['additional_contact' . $counter] != '') {
    $_SESSION['contact'][$counter]['additional_contact'] = $_POST['additional_contact' . $counter];
    $_SESSION['contact'][$counter]['additional_int_prefix'] = $_POST['additional_int_prefix' . $counter];
    $_SESSION['contact'][$counter]['additional_prefix'] = $_POST['additional_prefix' . $counter];
    $_SESSION['contact'][$counter]['additional_first'] = $_POST['additional_first' . $counter];
    $_SESSION['contact'][$counter]['additional_last'] = $_POST['additional_last' . $counter];
  } else {
    $_SESSION['contact'][$counter]['additional_contact'] = null;
    $_SESSION['contact'][$counter]['additional_int_prefix'] = null;
    $_SESSION['contact'][$counter]['additional_prefix'] = null;
    $_SESSION['contact'][$counter]['additional_first'] = null;
    $_SESSION['contact'][$counter]['additional_last'] = null;
  }
}
<時間>

それについて考える:あなたのwhileループでは、あなたが$_POST['additional_contact1'] != ''かどうかをテストします。しかし、あなたは再びその値を変更することはありません。それは!= ''があるいったんので、whileループの条件が常にtrueと評価されます。

他のヒント

たぶん、ループの条件がfalseと評価されたことがない?

あなたはこれ以上のメモリが利用できなくなるまでメモリを消費しますが、無限ループがある場合があります。

while($_POST['additional_contact1'] != '' || $_POST['additional_contact2'] != '' || $_POST['additional_contact3'] != '') {
これらの3つの値が体内で変化していない場合は、

は、あなたが作成したとinifiteループ。あなたが代わりにifを使用する場合がありますが、私は全体の文脈を知らない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top