5

运行相当活跃的站点的服务器上出现了一个奇怪的错误。

  • 服务器:Apache/2.2.3 (CentOS)
  • PHP: 5.2.6
  • eAccelerator 0.9.5.3

在使用多部分表单时,有时从文本区域发送的数据会在 $_POST 中丢失

我们知道数据已发送,因为 content_length 显示超过 1K 的合理大小

正确接收表单中的所有其他输入字段。

它不是特定于浏览器的,发生在 IE/Firefox/Chrome 上。

几乎 99% 的时间都有效,平均每发布 100 个帖子只有 1 或 2 次失败。

在极少数情况下,我们能够自己重现它,所以我们知道数据正在发送,只是没有被 apache/php 处理

所有这些设置都经过检查,在 php.ini 中是合理的:

memory_limit
max_input_time
upload_max_file_size
post_max_filesize

在 httpd.conf

LimitRequestBody
TimeOut

很想听听其他想法这可能是什么。我找不到任何已知的 PHP 相关错误。

4

1 回答 1

2

不确定这是不是问题(不是一个容易猜到的问题^^),但是如果您有suhoshin安全补丁/扩展,您是否尝试停用它?
(我不知道它是否在 CentOS 上默认激活,但可能是,考虑到它在 Ubuntu 上,它是“较少面向企业的”)

我建议这样做是因为这个错误报告,其中有一些注释说,例如:

[2007 年 10 月 30 日上午 11:02 UTC] sbauer 在 gjl-network dot net

在遇到此问题时,我们也发现此问题的原因是 suhosin 补丁,默认情况下,该补丁被配置为对 cookie、请求、发布、获取和会话变量的长度有最大限制。例如,对于 POST,这看起来像:

suhosin.post.max_array_depth 100 100 suhosin.post.max_array_index_length 64 64 suhosin.post.max_name_length 64 64 suhosin.post.max_totalname_length
256 256 suhosin.post.max_value_length 65000 65000 suhosin.post.max_vars
2002

这些导数需要设置为足够高的数字。例如,在我们的例子中,问题是我们的 POST 数据太长(因为这里的很多人似乎都是这种情况)。

所以我建议检查您的 php.ini 或(根据您的发行版通常有一个 suhosin.ini)并更正上述值或将它们设置为 0 以禁用它。如果未设置这些导数,则将使用默认值。您需要检查/添加: suhosin.post.max_.... suhosin.request.max_... suhosin.get.max_... suhosin.session.max_... suhosin.cookie.max_...

请参阅您的 phpinfo() 应在其中列出这些值!

和/或:

[UTC 时间 2008 年 11 月 13 日下午 4:58] tdrnetworks dot com 的 keith

关于 enctype="multipart/form-data" 没有填充 $_POST 变量,我发现我的解决方案是禁用 Suhosin 安全模块。

试试吧!

还有一条注释说:

[UTC 时间 2 月 5 日下午 6:49] yahoo dot com 的 neal dot pressley

我面临着同样的问题。我有一个带有 php 脚本的 html 表单,我在其中提交单选按钮或复选框。当我发布表单时,PHP 没有找到任何发布参数。它是随机的,有时它工作,有时不工作。即使我尝试使用 Get,它也有一段时间有效,有一段时间无效。然后我将 ENCTYPE 从大写更改为小写,它开始正常工作

您的表单/页面 HTML 有效吗?也许,在极少数情况下,不是吗?


也许这会有所帮助......如果没有,我很想知道这个问题的原因!

于 2009-07-28T05:35:59.580 回答