当在PHP中发布textarea时,为什么_POST有时会为空

时间:2008-10-23 10:37:14

标签: php apache2

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

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

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

我已经google了一个答案,但一直找不到答案。

firefox上的HTTP标头使用正确的数据显示内容大小为3816,因此它只是没有达到$ _POST。

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

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

感谢您的协助。

5 个答案:

答案 0 :(得分:2)

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

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

假设这是你的结构:

/form.php
/directory/index.php

这是你的表格:

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

在这种情况下的问题是,即使/directory是有效网址,Apache也会再次将您重定向到/directory/,因此您将丢失有效负载(应该在{ {1}})。

答案 1 :(得分:1)

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

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

file_get_contents('php://input');

确保他们实际上是数据发送。 得到了这些建议here

答案 2 :(得分:1)

可能不是与帖子相关的大小,而是该行在新行之前的持续时间。如果他们使用Moodle WYSIWYG视图,html将被放入一行而不会中断。如果你进入html并且每1000个字符左右返回它是否有效?

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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