我有一个以下问题,我有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>
Run Code Online (Sandbox Code Playgroud)
upload.php的
print_r($_POST); // array()
print_r($_FILES); // array()
exit;
Run Code Online (Sandbox Code Playgroud)
它工作正常,如果文件大小低于10MB(文件大小限制为10MB),我不想增加它,我只想捕获PHP中的错误.
从PHP站点更新(解释/解决方案)
来自PHP网站(我错过了这一部分):http: //us.php.net/manual/en/ini.core.php#ini.post-max-size
设置允许的发布数据的最大大小.此设置也会影响文件上载.要上传大文件,此值必须大于upload_max_filesize.如果配置脚本启用了内存限制,则memory_limit也会影响文件上载.一般来说,memory_limit应该大于post_max_size.使用整数时,该值以字节为单位进行测量.也可以使用本FAQ中描述的速记符号.如果发布数据的大小大于post_max_size,则$ _POST和$ _FILES超全局变量为空.这可以通过各种方式跟踪,例如,通过将$ _GET变量传递给处理数据的脚本,即,然后检查是否设置了$ _GET ['processed'].
Aug*_*ing 36
如编辑问题中所述,当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.');
}
Run Code Online (Sandbox Code Playgroud)
选项b)
添加一个GET参数,告诉POST数据是否存在.
Cro*_*tab 14
运行phpinfo()和检查,以确保您upload_max_filesize和post_max_size指令是足够大的.
http://us.php.net/manual/en/ini.core.php#ini.upload-max-filesize
http://us.php.net/manual/en/ini.core.php#ini.post-max-size