我有以下问题,我有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’]。
如已编辑的问题中所述,当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数据是否存在。