是否需要根据 php.ini 手动检查文件大小?
Is it necessary to check file size against php.ini and manually?
因此,在 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'));
(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'));
并不总是安全的,需要额外处理
因此,在 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'));
(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'));
并不总是安全的,需要额外处理