Tamanho da memória permitido de 33554432 Bytes esgotados (tentados para alocar 93 bytes) Erro no PHP
-
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?
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.