因此,当用PHP上传文件时,我目前正在针对php.ini文件检查上传大小错误:
switch ($_FILES['file']['error']) {
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
throw new RuntimeException('No file sent.');
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
throw new RuntimeException('Exceeded filesize limit.');
default:
throw new RuntimeException('Unknown errors.');
}
然后手动检查:
$max_size = "10490000";
if ($_FILES['file']['size'] > $max_size) {
throw new RuntimeException('Exceeded filesize limit.');
}
第二步是否必要?或者只是检查错误就足够了。
或者,如果有必要,我可以安全地做第二次检查:
$max_size = (int)(ini_get('upload_max_filesize'));
答案 0 :(得分:1)
(1)第二步没有必要,但您必须将UPLOAD_ERR_INI_SIZE
案件与UPLOAD_ERR_FORM_SIZE
案件分开,因为它们具有不同的含义,如手册所述
http://php.net/manual/en/features.file-upload.errors.php
(2)php.ini文件中的条目upload_max_filesize
的值是用这种表示法写的:
XY :其中 X 是一个整数, Y 是单位, Y 可以是G(千兆字节),M(兆字节)......等,阅读手册以获得更多说明
http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes,因此使用(int)(ini_get('upload_max_filesize'));
始终不安全,需要额外处理