【问题标题】:Why is _POST sometimes empty when a textarea is posted in PHP为什么在 PHP 中发布文本区域时 _POST 有时为空
【发布时间】:2010-09-18 18:14:40
【问题描述】:

Ubuntu 上 Apache 2.2.4 下的 PHP 4.4 和 PHP 5.2.3。

我正在运行 Moodle 1.5.3,最近在更新课程时遇到了问题。 $_POST 变量为空,但前提是在表单的文本区域中输入了大量文本。如果只输入一个简短的文本,它就可以正常工作。

我已将 post_max_size 从 8M 增加到 200M,并将 memory_limit 增加到 256M,但这并没有帮助。 我将 LimitRequestFieldSize 和 LimitRequestLine 加倍为 16380,并将 LimitRequestBody 设置为 0,但没有任何改进。

我已经用谷歌搜索了答案,但一直找不到。

firefox 上的 HTTP 标头显示 3816 的内容大小和正确的数据,所以它只是没有到达 $_POST。

系统运行良好,直到几周前。唯一的更改是 /etc/hosts 以更正 exim4 电子邮件服务器的 HELO 问题。

我可以在 exim4 未运行的开发机器上复制该问题,所以我认为这只是巧合。

感谢您的帮助。

【问题讨论】:

  • 奇怪。您确定了确切的阈值吗?详细信息可能对那些希望重现问题的人有用。
  • 你说少量文字没有问题:你能找到大概的限制吗?
  • 这可能很明显,但是您是否检查过该表单确实使用 POST,而不是 GET?
  • 不,确切的阈值似乎有所不同,但 2702 个字符似乎使其失败,有时更少
  • 嗯...我绝对认为您需要继续努力找出问题所在。它是变量的事实表明您没有遇到某个固定限制,并且您很可能遇到了一个可能与内存管理有关的错误。有什么奇怪的字符吗?表格有什么不标准的地方吗?

标签: php apache2


【解决方案1】:

我知道的还不够多,无法真正提供有用的答案,所以以下是一个受过良好教育的猜测(至少我希望如此)。

首先,您应该通过 access_log 或例如通过firebug 调试整个请求。 (无论如何,有 Firebug 很好。)对我来说,您的问题听起来就像在两者之间发生了重定向。我举个例子:

假设这是你的结构:

/form.php
/directory/index.php

这是你的表格:

<form action="/directory" method="post">
...
</form>

在这种情况下的问题是,即使/directory 是一个有效的 url,Apache 也会再次将您重定向到/directory/,因此您正在丢失您的有效负载(应该在$_POST 中)。

【讨论】:

    【解决方案2】:

    可能不是与帖子的大小有关,而是该行在新行之前有多长。如果他们使用 Moodle WYSIWYG 视图,则 html 将被放入一行而没有中断。如果您进入 html 并在每 1000 个字符左右按回车键,它会起作用吗?

    【讨论】:

      【解决方案3】:

      表单的enctype是什么?可能是它限制了通过表单发送的数据量。

      您可能还想检查传入的原始 $_POST 数据:

      file_get_contents('php://input');
      

      以确保它们实际上是数据发送。 收到这些建议here

      【讨论】:

        【解决方案4】:

        这听起来像是 Apache 或 Apache/PHP 集成问题。如果 $_POST 为空,则表明 http 服务器没有将 POST 信息提供给 PHP。如果我是你,我会调查 Apache 配置。

        【讨论】:

        • HTTP Live Headers(Firefox 扩展)正确显示 POST 内容。
        【解决方案5】:

        这很明显,但是你 /etc/init.d/apache2 重启了吗?

        此外,error_log 文件应显示有关帖子大小是否超出设置限制的一些信息。考虑增加排查问题的详细程度

        【讨论】:

          猜你喜欢
          • 2011-04-29
          • 1970-01-01
          • 1970-01-01
          • 2019-05-31
          • 2011-06-11
          • 1970-01-01
          • 2016-08-29
          • 1970-01-01
          • 2018-07-09
          相关资源
          最近更新 更多