Tamanho da memória permitido de 33554432 Bytes esgotados (tentados para alocar 93 bytes) Erro no PHP

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

  •  20-09-2019
  •  | 
  •  

Pergunta

Eu inseri o seguinte código:

$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++;
}

E recebi este erro: Erro fatal: Tamanho da memória permitido de 33554432 Bytes esgotados (tentou alocar 93 bytes)

Tentei aumentar o limite de memória com ini_set (), mas ele ainda não funcionará a 96m. O que estou fazendo de errado com meu código para que ele precise de tanta memória? Como posso resolver esse problema?

Foi útil?

Solução

Como os outros dizem, você criou um loop infinito. Use um for ciclo em vez de.

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;
  }
}

Pense nisso: em seu loop enquanto você testa se $_POST['additional_contact1'] != '' ou não. Mas você nunca mais muda esse valor. Então, uma vez que é != '', a condição no while loop sempre avalia para true.

Outras dicas

Talvez a condição do loop nunca avalie como falsa?

Você pode ter um loop infinito que consome memória até que não haja mais memória disponível.

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

Se esses três valores não mudarem dentro do corpo, você criou e o loop inifito. Você pode querer usar if Em vez disso, mas eu não conheço todo o contexto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top