我能够重现您的错误的唯一方法是每次存储一个值并将其长度$_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以更好地了解正在发生的事情。