PHP memory_get_peak_usage 和 ini_set ('memory_limit' , '-1' )

标签 php memory-management memory-limit

我最近遇到了内存分配问题,所以我开始尝试使用 ini_set('memory_limit', value);我尝试逐步输入值的指令。现在,通过网络(和 SO)搜索我发现我可以输入 -1value .所以,我做到了,现在脚本完全运行到最后而不会中断(在我以前出现内存分配错误之前)。

然而,我不明白的是,在脚本文件的末尾给出了这两行:

$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'); ?我的意思是,我确实读过放置 -1value不推荐,我知道问题出在脚本中(在内存中一次读取过多的数据),我将通过顺序读取来修复它,但我只是对这些数据差异感到困惑,所以如果有人能对此有所了解,我将不胜感激。

最佳答案

这是因为 suhosin 补丁使用了它自己的“硬”最大内存限制, suhosin.memory_limit .

从配置引用:

Suhosin [...] disallows setting the memory_limit to a value greater than the one the script started with, when this option is left at 0.



换句话说,如果您更改 memory_limit所以它大于 suhosin 的上限,那么它会简单地假设你是一个“攻击者”,试图做一些可疑的事情。

关于PHP memory_get_peak_usage 和 ini_set ('memory_limit' , '-1' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495281/

相关文章:

javascript - 如何编辑数据表按钮的位置?

php - 使用 PHP 和 jQuery 的单选按钮测验

php - 从表中删除X行

iOS 内存警告发送到释放的 UIViewController

php - PHP循环502错误的网关

PHP:设置 memory_limits > 1024M 不起作用

php - 当客户端说 HTTP/1.1 时,为什么 $_SERVER ["SERVER_PROTOCOL"] 显示 HTTP/1.0

java - 解析/保存/缓存多个文件时减少Java内存使用

c - 为什么 malloc(0) 在 Windows 中返回一个非空地址?

php - 如何使用PHP制作大型数组(26000 x 26000)?