Единственным способом, которым я смог воспроизвести вашу ошибку, является сохранение значения в $_SESSION
и удвоение его длины каждый раз. Вот мой код:
<?php
session_start();
if (!isset($_SESSION['test'])) {
$_SESSION['test'] = 'abcdefghij';
}
else {
$_SESSION['test'] .= $_SESSION['test'];
}
$_SESSION['memory'][] = memory_get_usage();
print_r($_SESSION['memory']);
exit;
После обновления страницы 24 раз, я, наконец, получить его запустить из памяти:
Array
(
[0] => 231768
[1] => 232088
[2] => 232248
[3] => 232424
[4] => 232640
[5] => 232728
[6] => 233200
[7] => 233984
[8] => 235376
[9] => 238136
[10] => 243392
[11] => 253768
[12] => 274384
[13] => 315480
[14] => 397536
[15] => 561512
[16] => 889328
[17] => 1544952
[18] => 2855808
[19] => 5477384
[20] => 10720400
[21] => 21206296
[22] => 42177952
[23] => 84121128
)
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 83886344 bytes) in Unknown on line 0
Вы можете видеть, что увеличение использования памяти каждый раз, когда страница обновляется ,
Когда вы указываете PHP на exit
, он не выполняет ничего в вашем коде. Я думаю, что где-то после того, как вы делаете exit
, вы также сделать что-то вроде:
$_SESSION['test'] = 'something else';
Когда вы exit
страницу, это будет не получить выполнен и поэтому бросает его в экспоненциально увеличивающимся петлю, увеличивая потребление памяти каждый время. Если вы не можете найти ничего подобного, я бы порекомендовал посмотреть на Xdebug, чтобы получить лучшее представление о том, что происходит.
Вы никогда не добираетесь до второго 'memory_get_usage();' потому что вы вышли из сценария. – HamZa
Память автоматически освобождается при завершении скрипта, однако многое было использовано во время выполнения скрипта. –
. Вы проверяете использование памяти * перед * 'exit'. Все, что после этого (включая 'exit') не повлияет на него. – Mike