内存大小超过?

时间:2010-03-13 23:41:28

标签: php memory memory-leaks

我有一个将数据提交到数据库的表单,我有一个如下所示的函数:

//connect 
foreach ($_POST as $key => $value) {
    $_POST[$key] = mysql_real_escape_string($value);
}

现在当我发帖时,有时我收到一个错误,上面写着:

  

允许的内存大小为268435456字节耗尽

我发现当我做一个换行符,或者在消息字段中按Enter键时,那就是它导致错误,否则它正常工作。任何想法?

1 个答案:

答案 0 :(得分:1)

请尝试使用

重现错误
$mysql = mysql_connect(...

printf("<pre>Debug: count(_POST)==%d</pre>", count($_POST));
foreach ($_POST as $key => &$value) {
  printf("<pre>Debug: strlen(_POST[%s])==%d</pre>", htmlspecialchars($key), strlen($value)); flush();
  $value = mysql_real_escape_string($value, $mysql);
}
printf("<pre>Debug: Done.</pre>");

在“允许的内存大小为268435456字节耗尽”消息之前,是否会打印“异常”的内容?

编辑和顺便说一句:我不喜欢你试图处理real_escape_string的方式有两个原因:

  • 如果可能,请单独留下_POST,不要更改其值。 (我为了撤消magic_quotes而做了例外;-))
  • 只处理您知道需要的字段。不要编写“编码并在数据库中存储_POST中的所有内容”功能,尽管它听起来像是一个好主意和超可重复使用的代码。如果你想让它保持一定的可重用性,可以通过一个包含函数描述的数组。在那个数组中你可以例如存储信息,如[表单字段名称,允许的数据类型/验证规则,数据库字段名称]