返回列表 发帖
查看: 170|回复: 3

[求助] 关于PHP8.2 错误日志大量 PHP Fatal error: Out of memory

173

回帖

4

粉丝

0

关注

炉火纯青

贡献
0 点
金币
97 个
发表于 3 天前 |江苏| 查看全部 |阅读模式
[26-Jan-2026 12:56:45 Etc/GMT+0] PHP Fatal error: Out of memory (allocated 2097152 bytes) (tried to allocate 8192 bytes) in C:\Website\source\function\function_core.php on line 2280
[26-Jan-2026 12:56:45 Etc/GMT+0] PHP Fatal error: Out of memory (allocated 2097152 bytes) (tried to allocate 4096 bytes) in C:\Website\source\function\function_core.php on line 2269

PHP Version 8.2.30,千问说是 memory_limit限制了2mb,但是用phpinfo查看是  memory_limit = 128M

是什么问题呢?
我知道答案 回答被采纳将会获得1 贡献 已有3人回答
回复

使用道具 举报

173

回帖

4

粉丝

0

关注

炉火纯青

贡献
0 点
金币
97 个
 楼主| 发表于 前天 22:09 |江苏| 查看全部
错误发生在:
line 2232: 在 dintval() 函数中,尝试分配 20480 字节
line 2269: 在 dintval() 函数中,尝试分配 4096 字节
line 2280: 在 dintval() 函数中,尝试分配 8192 字节
核心问题是 dintval() 函数的递归调用在 PHP 8.2 中可能导致内存爆炸式增长!

官方有没有这个问题,或者有考虑优化吗?
回复

使用道具 举报

6524

回帖

9

粉丝

10

关注

应用开发者

贡献
648 点
金币
1450 个
QQ
发表于 昨天 08:07 |浙江| 查看全部
php
dintval的作用就是递归处理数组中的每个元素,这是绕不过去的需要。递归调用使用内存多少取决于这个数组有多大,越大的数组自然需要的内存越多,但这理论上不太可能超的。我这边PHP8.2用dintval处理完全没问题,从dintval函数中分析,这个是很常见且基础的操作。
  • PHP默认递归深度限制(zend.max_nesting_level)通常为100-256
  • 深度递归会占用大量栈内存,可能导致内存溢出或"Maximum function nesting level exceeded"错误。
  • PHP 8.2的内存管理虽然有优化,但基本递归限制仍然存在。
  • Discuz!项目中dintval主要用于处理一维ID数组(如dintval($ids, true))
  • Discuz!项目中未发现处理深度嵌套数组的场景
  • Discuz!项目中大部分使用场景是安全的
所以,其实主要是看你在哪使用这个函数,不恰当的使用才有风险,对于深度特别大,数组本身特别大的地方,要慎用。函数本身无错。如果你想要优化修改,可以考虑改成迭代写法(未经验证),如下:
php
回复

使用道具 举报

173

回帖

4

粉丝

0

关注

炉火纯青

贡献
0 点
金币
97 个
 楼主| 发表于 昨天 21:06 |江苏| 查看全部

好的,谢谢,2楼是AI分析的,我正在测试 session.use_strict_mode = 0 配置是不是会改善,等测试完了再试试你帮写的代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2026-1-29 15:41 , Processed in 0.044442 second(s), 11 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2026 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表