PHP-上载较大文件时清空$\u POST和$\u文件

PHP-上载较大文件时清空$\u POST和$\u文件,php,html,Php,Html,我有一个问题,我有一个HTML表单,可以上传一个包含一些额外信息的文件。但它允许上传小于10MB的文件。但当用户试图上传更大的内容时,$\u POST和$\u FILES数组都是空的(我预计$\u POST会有一些值,$\u文件会有一些值,但会指示上传错误) 有一些问题(空的$\u帖子,$\u文件)是这样的,但我没有找到任何解决方案,也没有找到任何解释 HTML格式: <form enctype="multipart/form-data" method="post" action="upl

我有一个问题,我有一个HTML表单,可以上传一个包含一些额外信息的文件。但它允许上传小于10MB的文件。但当用户试图上传更大的内容时,$\u POST和$\u FILES数组都是空的(我预计$\u POST会有一些值,$\u文件会有一些值,但会指示上传错误)

有一些问题(空的$\u帖子,$\u文件)是这样的,但我没有找到任何解决方案,也没有找到任何解释

HTML格式:

<form enctype="multipart/form-data" method="post" action="upload.php">
    <p>
        <input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
        <input type="file" name="image"  />
    </p>
    <p>
        <input type="text" name="other_field" />
    </p>
</form>
它工作正常,如果文件大小小于10MB(文件大小限制为10MB),我不想增加它,我只想捕获PHP中的一个错误

从PHP站点更新(解释/解决方案)

从PHP站点(我错过了本节):


设置允许的post数据的最大大小。此设置还影响文件上载。若要上载大文件,此值必须大于upload_max_filesize。如果配置脚本启用了内存限制,则内存限制也会影响文件上载。一般来说,内存限制应该大于post最大大小。使用整数时,该值以字节为单位。也可以使用本常见问题解答中所述的速记符号。如果post数据的大小大于post_max_size,则$_post和$_文件超全局为空。这可以通过多种方式进行跟踪,例如,通过将$\u GET变量传递给处理数据的脚本,即,然后检查是否设置了$\u GET['processed'.

在客户端和服务器端都有一些限制

在客户端,MAX_FILE_SIZE字段没有多大用处,也许浏览器会将其作为提示;但浏览器遵循其配置的限制

在服务器端,检查php.ini以了解:

upload_max_filesize = 5M

post_max_size = 5M 

max_input_time = ...
还要检查Apache的日志以了解有关丢弃的POST正文或类似内容的注释。

运行
phpinfo()
,并检查以确保您的
upload\u max\u filesize
POST\u max\u size
指令足够大


您可以通过以下方式检查上传错误:

if ($_FILES['images']['error'] !== UPLOAD_ERR_OK) {
   die("Upload failed with error code " . $_FILES['images']['error']);
}

错误代码已定义。

如编辑的问题中所述,$\u POST和$\u文件在PHP自动丢弃数据时为空(当实际数据大于POST\u max\u大小时发生)。由于HTTP头和$\u GET保持不变,因此可以使用它们来检测丢弃

备选方案a)

选项b)

添加一个GET参数,告诉您是否存在POST数据。

如果您像下面这样处理表单,我可以提到这一点

if(isset($_POST['submit'])

如果post_max_size小于发布的数据,则$_post['submit']将为空

您是否阅读了?是的,但可能我遗漏了一些内容。在这种情况下,$\u文件和$\u POST数组都是空的,似乎它们应该给你一个错误代码。是的,我知道有限制,但当达到这些限制时,它不应该给你一个错误吗?他说,
$\u文件
是空的。无法检查不存在的内容。注意:$\u服务器['CONTENT\u LENGTH']未“始终”设置,服务器主机可以禁用此变量的可见性谢谢,这就是答案!谢谢终于找到了为什么输入为file upload类型的HTTP表单在上载文件时有空负载!文件太大了!你的解决方案也让一切恢复到完美状态。这并没有解决为什么
$\u POST
是空的问题。如果文件大小有错误,你会看到一条错误消息,而不是一篇空的
$\u帖子
@brentonstrine你真的要从2011年10月——几乎三年前——的一篇帖子中对答案进行抱怨并投反对票吗?OP试图发送大于其
post\u max\u大小的文件。这反过来(阅读OP)会使
$\u POST
$\u文件
变为空。其目的不是抱怨——尽管我知道这是怎么回事。你的答案比奥古斯都的答案高,奥古斯都的答案比你的答案更能解释问题所在,甚至提供了一个解决方案来检测
$\u POST
何时为空,因为它超过了最大值。我对他的答案投了高票,对你的答案投了低票,这样他的答案会是第一个,因为它更有用。这一评论只是对否决票的一种解释。不过,我支持反对票:关键信息是为什么
$\u POST
会是空的。POST\u max\u size是我遇到问题的原因。谢谢@Crontab
if(intval($_SERVER['CONTENT_LENGTH'])>0 && count($_POST)===0){
    throw new Exception('PHP discarded POST data because of request exceeding post_max_size.');
}
if(isset($_POST['submit'])