超过post_max_size时的php行为

时间:2011-11-01 17:19:12

标签: java php .net file-upload

据我所知,如果POST请求超过post_max_size,则$ _POST和$ _FILES超全局变为空。

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

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

由于

4 个答案:

答案 0 :(得分:2)

如果一个数组只能容纳50个索引而你推动100个,那么你会期望其他50个指数保留在某个位置吗?

这同样适用于此设置。虽然可能有一些POST数据可以适合最大尺寸,但是拥有预期整体的一部分会产生比没有任何问题更多的问题。正确?

检测EMPTY帖子比检测不完整帖子要容易得多。

我相信这是他们的理由。

答案 1 :(得分:1)

使用.NET回答第二个问题的一部分,如果POST大于maxRequestLength(.NET配置的一部分),但小于maxAllowedContentLength(部分IIS配置)您可以create custom HTTP module获取POST的部分内容。

没有自定义HTTP模块,it'll just throw an exception。您希望maxRequestLength成为限制因素otherwise IIS will deal with it instead of .NET

答案 2 :(得分:0)

我不能代表实施者,但代码更简单。由于超级全球被煮熟,他们将不得不决定如何处理部分职位,这将不可避免地导致许多人混淆。还有其他选择:

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

或查看$HTTP_RAW_POST_DATA虽然afaik,但这些都不适用于multipart/form-data

答案 3 :(得分:0)

这是PHP代码的一个非常令人沮丧和奇怪的方面。有人说它的设计非常草率,但是嘿,这是一个很容易避免的问题 - 而且,如果有的话,它应该只能重申UI和数据传输设计的重要性。

对于必须超过ini设置的表单(文件上传,大量文本等),我总是将事物异步上传到每天擦除的tmp目录。如果表单完成(现在剥离了大量数据),文件将被转移到永久位置。

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

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