3

次のコードを挿入しました。

$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では機能しません。大量のメモリを必要とするコードで何が間違っているのでしょうか。どうすればこの問題を解決できますか?

4

3 に答える 3

4

他の人が言うように、あなたは無限ループを作成しました。代わりに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ます。

于 2010-03-17T09:58:31.527 に答える
3

たぶん、ループの状態がfalseと評価されることはありませんか?

于 2010-03-17T09:47:23.290 に答える
1

そこには無限ループがあり、使用可能なメモリがなくなるまでメモリを消費する可能性があります。

while($_POST['additional_contact1'] != '' || $_POST['additional_contact2'] != '' || $_POST['additional_contact3'] != '') {

これらの3つの値がボディ内で変化しない場合は、ループを作成して初期化します。代わりに使用することをお勧めしますifが、全体のコンテキストはわかりません。

于 2010-03-17T09:49:29.627 に答える