加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 访问未定义的数组索引导致内存泄漏

发布时间:2020-12-13 16:50:24 所属栏目:PHP教程 来源:网络整理
导读:我有一个脚本分析 XML数据并用信息填充相同的数组. 对于某些(巨大的)输入,脚本崩溃了. 有一个foreach循环,运行180次没有问题(memory_get_usage()在迭代180大约20 MB,每个循环增加约0.1 MB) 然后它发生在每个新循环中,内存使用量只增加一倍. 通过使用大量日志
我有一个脚本分析 XML数据并用信息填充相同的数组.

对于某些(巨大的)输入,脚本崩溃了.

有一个foreach循环,运行180次没有问题(memory_get_usage()在迭代180大约20 MB,每个循环增加约0.1 MB)

然后它发生在每个新循环中,内存使用量只增加一倍.

通过使用大量日志记录,我能够将问题跟踪到foreach中的以下行.

$fu = $f [‘unit’]

$f具有以下结构:

array (
  'name' => 'Test','value' => '4','unit' => 'min-1',)

但是在一些(很多)情况下(但也在第180次迭代之前),关键单元不存在于数组中.

我能够通过替换以下行来消除问题:

$fu = (isset($f['unit']) ? $f['unit'] : '');

然后迭代运行直到完成(总共370次迭代).

这种现象有什么解释吗?

PHP版本:带有Suhosin-Patch的PHP 5.3.3-1ubuntu9.10(旧…)

解决方法

您的问题可能来自PHP错误处理程序,而不是来自您的实际循环.

就像你说的那样,并不是每个“单元”键都存在,因此会出现错误(或异常取决于你的错误处理程序).这可能还包括堆栈跟踪和进一步的调试信息,具体取决于您安装的扩展名(xdebug?).

两者都会消耗内存.

在使用变量之前检查变量是一种很好的做法. Allways在开发系统中启用E_NOTICE错误以查看任何此类问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读