0

我有这个问题:并非所有 POST 数据都是从浏览器发送的,或者在表单的操作页面上不可用。

我需要知道:

  • 原因是什么?
  • 如何控制是什么原因?
  • 如何解决这个问题?

该操作的页面不会返回任何错误(即使 I set error_reporting(E_ALL);)。服务器是Linux。表单的输入很多,有些是最多包含两个嵌套键 ( array[1][2]) 的数组。

我尝试发送更少的输入并且它可以工作,但我需要使用页面中的所有输入。

$_POST我打印了表单操作页面接收到的所有 POST 数据,并且变量中没有最后的输入。

谢谢

4

3 回答 3

5
  • 原因是什么?

原因通常是 PHP 配置。但也有可能是 HTTP 请求被破坏或网络服务器配置错误。

  • 如何控制是什么原因?

您可以使用 PHP 配置来控制配置。对于网络服务器也是如此。对于中断的请求,您需要检查网络是否正常,但您无法始终控制它,因为通常您无法控制整个网络。所以你只能关心你控制的部分。

  • 如何解决这个问题?

最好的方法是首先找出哪些部分对此没有影响。这意味着您应该首先排除网络是问题(传入请求是否正常?您可以使用网络嗅探器进行验证)。

下一步是确保网络服务器正常工作。大多数网络服务器都可以帮助您,请在此处查看您使用的产品的文档以获取您的选项。

例如,如果您使用的是 Apache,这可以是LimitRequestBody之类的设置,或者如果您安装了安全模块,则可以设置这些模块。

如果您确定实际上是 PHP 导致了问题:

就 PHP 配置而言,该配置在 PHP 手册中进行了概述和记录。你应该从

以下选项通常是最相关的。全部都需要设置php.ini.htaccess仅设置(使用这些将不起作用ini_set()):

这些是一些常见的罪魁祸首,但我无法概述所有可能起作用的配置设置。如果您有损坏的数据,这些核心 php.ini 指令中的许多都可以应用。特别检查那里的HTTP数据部分。

一件非常重要的事情是——当你进行输入处理时——你需要记录错误。在数据到达 PHP 时以及它在哪里被破坏时,这些错误只能记录到磁盘 - 不显示。因此,您需要启用错误日志并遵循错误日志。有关PHP 错误处理的相关配置,请参见 PHP 手册中的不同部分:

于 2013-05-02T10:29:29.553 回答
0

如果您可以访问 php.ini,请检查该post_max_size参数是否足以满足您的输入。

于 2013-05-02T10:25:34.580 回答
0

您可以通过将其临时添加到您的 PHP 代码中来检查这是否是真正的内存问题:

ini_set('memory_limit', '-1');

这将允许您的脚本使用可用的最大内存量。

如果您发现问题与内存有关,您可以使用相同的代码调整所需内存块的大小,但将“-1”替换为您的内存需求。

于 2013-05-02T10:26:37.623 回答