【问题标题】:Is it necessary to check file size against php.ini and manually?是否有必要根据 php.ini 手动检查文件大小?
【发布时间】:2015-02-28 09:11:43
【问题描述】:

因此,当在 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'));

【问题讨论】:

    标签: php apache file-upload upload


    【解决方案1】:

    (1) 第二步不是必须的,但你必须将UPLOAD_ERR_INI_SIZE case 与UPLOAD_ERR_FORM_SIZE case 分开,因为它们有不同的含义,正如手册所说 http://php.net/manual/en/features.file-upload.errors.php

    (2) php.ini 文件中的条目upload_max_filesize 的值使用以下符号编写:
    XY:其中X是整数,Y是单位,Y可以是G(giga字节),M(兆字节)...等,阅读手册以获得更多说明 http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes,所以使用 (int)(ini_get('upload_max_filesize')); 并不总是安全的,需要额外处理

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多