一尘不染

PHP-空的$ _POST和$ _FILES-上传较大的文件时

php

我有以下问题,我有HTML表单,该表单上载了一些其他信息。但是它只允许上传小于10MB的文件。但是,当用户尝试上传更大的内容时,$ _ POST和$
_FILES数组都为空(我希望$ _POST将具有一些值,而$ _FILES将具有一些值,但会指示存在上传错误)。

像这样有几个问题(空的$ _POST,$ _ FILES),但是我没有找到任何解决方案或解释。

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>

upload.php

print_r($_POST);  // array()
print_r($_FILES); // array()
exit;

如果文件大小小于10MB(文件大小限制为10MB),并且我不想增加它,我只想捕获PHP中的错误,它就可以正常工作。

从PHP网站更新(说明/解决方案)

从PHP网站(我错过了本节):http : //us.php.net/manual/zh/ini.core.php#ini.post-max-
size

设置允许的帖子数据的最大大小。此设置还会影响文件上传。要上传大文件,此值必须大于upload_max_filesize。如果您的配置脚本启用了内存限制,则memory_limit也将影响文件上传。一般而言,memory_limit应该大于post_max_size。使用整数时,该值以字节为单位。也可以使用本常见问题解答中所述的速记符号。如果发布数据的大小大于post_max_size,则$
_POST和$ _FILES超全局变量为空。这可以通过各种方式进行跟踪,例如,通过将$ _GET变量传递给处理数据的脚本,即,然后检查是否设置了$ _GET
[‘processed’]。


阅读 269

收藏
2020-05-29

共1个答案

一尘不染

如已编辑的问题中所述,当PHP静默丢弃数据时,$ _ POST和$ _FILES为空(当实际数据大于post_max_size时发生)。由于HTTP标头和$
_GET保持不变,因此可以将其用于检测丢弃。

选项a)

if(intval($_SERVER['CONTENT_LENGTH'])>0 && count($_POST)===0){
    throw new Exception('PHP discarded POST data because of request exceeding post_max_size.');
}

选项b)
添加一个GET参数,该参数指示POST数据是否存在。

2020-05-29