是否需要根据 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')); 并不总是安全的,需要额外处理