ini_set('memory_limit', value);
指令进行实验,并逐步增加值。现在,在网上(和SO)搜索时,我发现我可以将-1
作为value
。于是我这样做了,现在脚本可以完整运行到结束而不会出现内存分配错误。然而,我不明白的是,在脚本文件的末尾给出了以下两行代码:
$mem = memory_get_peak_usage(true);
echo "Peak mem. usage: <b>" . round($mem / 1024 / 10124, 2) . "</b> MB";
生成约10.8MB,当我查看/var/log/messages
时,可以看到这一行:
Nov 21 13:52:26 mail suhosin[1153]: ALERT-SIMULATION - script tried to increase
memory_limit to 4294967295 bytes which is above the allowed value (attacker
'xx.xxx.xxx.xxx', file '/var/www/html/file.php', line 5)
这意味着脚本试图分配4096MB的内存!
这怎么可能呢?而且,最让我感兴趣的是为什么脚本执行在这种情况下没有停止?是因为ini_set('memory_limit', '-1');
吗?我的意思是,我确实读到过将-1
作为value
的不推荐做法,我也知道脚本中存在的问题(一次性读取了太多数据到内存中),我会使用顺序读取来修复它,但我对这些数据差异感到困惑,所以如果有人能解释一下就好了。