表单提交时,PHP的$_POST数组为空。

119

我有一个自定义的内容管理系统(CMS),在我的开发环境中(Ubuntu/PHP5+/MySQL5+)运行得非常完美。

我刚把它移到生产环境为我的客户服务,但现在所有的表单提交都显示为空的 $_POST 数组。

我发现了一个技巧来验证数据是否被传递,使用 file_get_contents('php://input'); ,数据在那里正常显示 -- 无论是 $_POST/$_REQUEST 数组总是空的。

我也通过 firebug 验证了正确的 content-type header (application/x-www-form-urlencoded; charset=utf-8)。

不管是通过 AJAX 还是普通的表单提交,这个问题都会发生。

非常感谢任何帮助!


3
请检查post_max_size的值是否设置为8M而不是8MB。如果设置错误,在最新版本中您可能看不到任何错误,但$_POST的大小将设置为0。 - Sergei Karpov
3
注意:如果缺少斜杠,Apache会进行301重定向。 - Leandro Bardelli
32个回答

0
创建 tmp 目录 chmod 777 tmp 在我的情况下,我使用的是虚拟机,并尝试增加所有建议的变量。但它们没有解决我的问题,我在项目中创建了一个 tmp 目录,问题得到解决。您需要找到您的项目正在寻找 tmp 目录的位置,并验证其是否存在。

-1

好的,我觉得我应该在这里陈述我的情况....有时候我发现特定情况下post数组为空...表单工作正常,但有时用户抱怨点击提交按钮后什么都没有发生.... 经过一番挖掘,我发现我的托管公司有一个安全模块,检查用户输入并清除整个post数组(不仅仅是恶意数据),如果发现有问题。在我的例子中,一位数学老师试图输入方程:dy + dx + 0 = 0; 结果数据被完全清除。

为了解决这个问题,我现在建议他在文本区域中输入数据为dy + dx + 0 = zero,现在它可以正常工作....这可以节省别人的时间..


7
要求用户容忍有缺陷的代码是行不通的。 - Colin R. Turner
这并不是真正的错误代码,但您可能需要考虑更换托管提供商。或者,以其他形式发布输入,例如HTML URL编码。 - Tom Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接