Разрешенный размер памяти 33554432 байт исчерпан (пытался выделить 93 байта), ошибка в php

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.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top