超过post_max_size时的php行为



我知道,如果POST请求超过POST_max_size,$_POST和$_FILES超全局变量将变为空。

我看过很多关于如何检测这种情况的讨论,但从来没有解释为什么超全局变量是空的。对我来说,清除POST数据,迫使用户重新输入他们的答案似乎真的很奇怪。这可能是一种安全预防措施吗?

对其他语言(java,.net(感到好奇。它们的行为相似吗?

感谢

如果一个数组只能容纳50个索引,而您推送了100个,您希望其他50个索引留在某个位置吗?

此设置也是如此。尽管可能有一些POST数据可以容纳最大大小,但拥有一部分预期的整体会比根本没有造成更多的问题。正确的

检测一个空帖子要比检测一个不完整的帖子容易得多。

我相信这就是他们的理由。

要回答第二个问题的一部分,请使用。NET,如果POST大于maxRequestLength(.NET配置的一部分(,但小于maxAllowedContentLength(IIS配置的一大部分(,则可以创建一个自定义HTTP模块来获取POST的通过部分。

如果没有自定义HTTP模块,它只会抛出一个异常。并且您希望maxRequestLength是限制因素,否则IIS将处理它而不是。NET。

这是PHP代码中一个非常令人沮丧和奇怪的方面。有人说这是一个相当草率的设计,但嘿,这是一种很容易避免的问题——如果有什么不同的话,这只会重申UI和数据传输设计的重要性

对于那些注定要超过ini设置的表单(文件上传、大量文本等(,我总是异步地将内容上传到tmp目录,该目录每天都会被擦除。如果表单完成(现在去掉了大量数据(,文件将被转移到永久位置。

您可以通过以下方式启动表单处理方法来检查是否出了问题:

if(empty($_POST))
{
  // show error to user
}

我不能代表实现者发言,但这样代码更简单。由于超级全局变量已经煮熟,他们将不得不决定如何处理部分帖子,这将不可避免地导致许多人的困惑。还有以下替代方案:

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

或者观察$HTTP_RAW_POST_DATA,尽管它们都不适用于multipart/form-data

最新更新