【问题标题】:Content Type and Content Length are set but $_POST array is empty设置了内容类型和内容长度,但 $_POST 数组为空
【发布时间】:2012-01-11 05:35:25
【问题描述】:

我在运行 php 5.3.8 和 Zend Engine 2.3.0 以及 eAccelerator、Xdebug 和 Suhosin 的本地服务器上安装了相当新的 apache/php。一切都很好,除了一个主要的帖子问题。每次将表单作为帖子提交时,都没有数据通过。 (print_r($_POST) 返回一个空白数组。)

我还在 $_SERVER 上完成了 print_r 并注意到 content_type 正确设置为 application/x-www-form-urlencoded 并且 content_length 设置得当,甚至根据输入的信息长度而变化提交前的表格。

话虽如此,以下所有代码均不返回任何内容:

var_dump($_POST);

$data = file_get_contents('php://input');
var_dump($data);

通过其他问题阅读了我能找到的所有内容,我检查了各种 php.ini 设置并查看了 phpinfo() 列表,所有与帖子相关的变量似乎都设置正确并且足够大最少处理带有两个文本输入框的表单...

感谢您的帮助!

【问题讨论】:

    标签: php linux


    【解决方案1】:

    没有更多信息,我只能给出一些非常笼统的说明:

    1. 验证您的表单元素所具有的actionmethod 属性的值,或者确保它按照您的预期进行。 (方法和操作属性都很重要。)
    2. 确保您已连接到 Web 服务器,并且没有应用程序防火墙过滤 POST 请求,包括硬件和软件。
    3. 通过使用本地网络或计算机上的wireshark 拦截请求,确保请求格式正确。使用 wireshark 和其他工具来跟踪请求的去向并确保它到达。
    4. 登录到您的服务器并查看它的日志。确保您收到请求。如果没有,请检查本地应用程序防火墙或其他工具(如 mod_security)拦截请求。如果是这样,请从服务器的角度查看预处理和后处理的请求。确保目标与步骤 1 中 action 的值一致。
    5. 随机猜测或询问您的(或一位)系统管理员。

    【讨论】:

    • 谢谢。我几乎已经进入了第 5 步,但我担心我错过了一些相当明显的东西。我一直在测试一个表单,它可以在没有 POST 信息的情况下正确重定向到不同的页面。如果我将方法从 post 更改为 get,则可以从 $_GET 或 $_REQUEST 检索信息。我刚刚下载了wireshark,可以看到一个格式完美的对服务器的POST请求。我猜测安装了一些额外的工具,并将在今天晚些时候对此进行更多测试。感谢您的回复!
    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2016-04-23
    • 2016-07-12
    • 2015-01-06
    相关资源
    最近更新 更多