Допустимый объем памяти 33554432 байта исчерпан (попытался выделить 93 байта) ошибка в php - PullRequest
2 голосов
/ 17 марта 2010

Я вставил следующий код:

$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. Что я делаю не так с моим кодом, чтобы сделать так много памяти? Как я могу решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 17 марта 2010

Как говорят другие, вы создали бесконечный цикл. Вместо этого используйте for loop .

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.

3 голосов
/ 17 марта 2010

Может быть, условие цикла никогда не оценивается как ложное?

1 голос
/ 17 марта 2010

У вас может быть бесконечный цикл, который потребляет память до тех пор, пока не останется свободной памяти.

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

Если эти три значения не меняются внутри тела, вы создали и цикл inifite. Возможно, вы захотите использовать if вместо этого, но я не знаю весь контекст.

...