【发布时间】:2012-07-13 18:17:47
【问题描述】:
我无法理解我的这部分代码导致内存泄漏的原因:
for($i=0; $i<count($values); $i++){
$values[$i] = addslashes($values[$i]);
}
为了将代码放在上下文中,我有一个先前构建的名为 values 的数组,其中包含要插入数据库的所有值。所有字段都是字符串,所以我需要转义所有字段,对于这个应用程序,addlashes 或 mysql_real_escape_string 是一个不错的选择 imo。
现在奇怪的是,只要我添加了上面显示的部分,我就会收到这样的消息:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes)
我知道这会产生内存泄漏,但我不知道为什么。
深入研究,我注释掉了 for 循环中的唯一一行,出于好奇而留下了 for 语句,泄漏就消失了。任何想法这可能意味着什么?
PS:字符串都是UTF8编码的,会不会有问题?
编辑:
数组包含类似这样的内容:
Array (
[dossier] => 002A
[permis] =>
[adresse] => 18, rue Bellevue
[ville] => Ste-Anne-des-Lacs (Québec)
[province] =>
[code_postal] => J0R 1B0
[numero_centrale] => N/A
[routes] => De la Gare, droite chemin Avila jusqu'au bout et droite chemin Ste-Anne-des-lacs sur 1,8 km et droite sur Bellevue.
)
【问题讨论】:
-
阵列有多大?以及数组的每一项?
-
你用
addslashes做什么?我感觉你做错了。 -
虽然它不能解决你的内存问题,但你不应该把
count放在这样的循环中;始终在循环之前将计数分配给某个变量,并在循环中使用该变量。按照您编写的方式,count()将通过$values为每次迭代调用 -
@Wug, mysql_real_escape_string 导致同样的问题,我先使用它,但我切换到添加斜杠来检查它是否有效
-
@AdamSack 我不知道我在想什么哈哈
标签: php memory-leaks addslashes