我有一个自定义的CMS我已经构建,在我的开发盒(Ubuntu/PHP5 +/MySQL5 +)上完美运行.
我只是将它移动到我的客户端的生产框中,现在所有表单提交都显示为空的$ _POST数组.
我找到了一个技巧来验证数据实际上正在使用file_get_contents('php://input');
并且数据在那里显示正常 - $_POST
/ $_REQUEST
数组总是为空.
我还通过firebug(application/x-www-form-urlencoded; charset=utf-8
)验证了内容类型标题是正确的.
无论表单是通过AJAX提交还是通过常规表单提交,都会发生此问题.
任何帮助是极大的赞赏!
我知道这个问题是关于通过表单发布的POST,但是在使用JSON内容类型进行POST时寻找类似问题的答案.找到答案并希望分享它,因为它花了我很多时间.
当使用JSON内容类型时,$ _POST数组将不会填充(我认为只有多部分表单)
以下是纠正问题的方法:
$rest_json = file_get_contents("php://input"); $_POST = json_decode($rest_json, true);
希望这有助于某人!
这是另一个可能的原因 - 我的表单是在没有WWW的情况下提交到domain.com.我已经设置了一个自动重定向来添加"WWW".$ _POST数组在此过程中被清空.所以我要做的就是提交给www.domain.com
我遇到了类似的问题.原来是一个简单的修复.以我的形式
其中directory是...目录的名称.我的POST阵列完全是空的.当我在浏览器中查看网址时,结果显示为正斜杠.
在我的操作结束时添加正斜杠就可以了 -
我的$ _POST数组又满了!
确保在php.ini中:
track_vars
(它仅适用于非常旧的PHP版本)设置为 On
variables_order
包含这封信 P
post_max_size
设置为合理的值(例如8 MB)
(如果使用suhosin补丁)suhosin.post.max_vars
并且suhosin.request.max_vars
足够大.
我想我的第二个建议将解决你的问题.
我发现,当从HTTP发布到HTTPS时,它们为$_POST
空。这是在测试表单时发生的,但是花了我一段时间才意识到。
我遇到了一个类似但略有不同的问题,花了2天时间来理解这个问题.
在我的情况下,POST数组也是空的.
然后用file_get_contents('php:// input')检查; 这也是空的.
后来我发现浏览器没有要求确认重新提交表单数据如果我刷新POST提交后加载的页面.这是直接刷新页面.但是,当我将表单URL更改为另一个时,它正确地传递了POST,并在尝试刷新页面时要求重新提交数据.
然后我检查了实际URL的错误.URL没有错,但它指向URL中没有index.php的文件夹,我在index.php检查POST.
在这里我怀疑从/到/index.php的重定向导致POST数据丢失并测试URL并将index.php附加到URL.
工作了.
在这里发布,所以有人会发现它很有帮助.