【问题标题】:How to determine the max file upload limit in php如何确定php中的最大文件上传限制
【发布时间】:2011-02-19 21:50:58
【问题描述】:

php设置允许的文件上传大小如何用php脚本确定?

【问题讨论】:

    标签: php


    【解决方案1】:

    上传受三个选项的限制:upload_max_filesizepost_max_sizememory_limit。您的上传只有在没有执行其中之一时才完成。

    ini_get() 函数为您提供了限制的简写,应先进行转换。感谢AoEmaster

    function return_bytes($val) {
        $val = trim($val);
        $last = strtolower($val[strlen($val)-1]);
        switch($last) 
        {
            case 'g':
            $val *= 1024;
            case 'm':
            $val *= 1024;
            case 'k':
            $val *= 1024;
        }
        return $val;
    }
    
    function max_file_upload_in_bytes() {
        //select maximum upload size
        $max_upload = return_bytes(ini_get('upload_max_filesize'));
        //select post limit
        $max_post = return_bytes(ini_get('post_max_size'));
        //select memory limit
        $memory_limit = return_bytes(ini_get('memory_limit'));
        // return the smallest of them, this defines the real limit
        return min($max_upload, $max_post, $memory_limit);
    }
    

    来源:http://www.kavoir.com/2010/02/php-get-the-file-uploading-limit-max-file-size-allowed-to-upload.html

    【讨论】:

    • 需要注意的是,这并没有考虑到 ini 文件中的简写符号,所以如果你有“64M”的限制,它将被解析为 64。最好在比较之前将所有转换为字节。
    • 我同意布雷迪的观点,我现在看到的大多数 ini 文件都使用速记符号。
    • 使答案符合需求。
    • 另一个可能限制文件上传的因素是运行时。检查 max_execution_time 和 max_input_time。
    【解决方案2】:

    使用ini_get获取当前配置值:

    ini_get('upload_max_filesize')
    

    【讨论】:

      【解决方案3】:
      function return_bytes($val) 
      {
          $val = trim($val);
          $last = strtolower($val[strlen($val)-1]);
      
          switch($last) 
          {
              case 'g':
              $val *= 1024;
              case 'm':
              $val *= 1024;
              case 'k':
              $val *= 1024;
          }
      
          return $val;
      }
      
      function get_upload_max_filesize()
      {
          $max_upload = return_bytes(ini_get('upload_max_filesize'));
          $max_post = return_bytes(ini_get('post_max_size'));
          return min($max_upload, $max_post, $memory_limit);
      }
      

      【讨论】:

      • 除了一段代码之外,多做一点解释会更有用。
      • 对不起,我是法国人,我无法用流利的英语解释。我只是想提供帮助并分享我的解决方案。
      • 缺少 $memory_limit 部分
      • 优雅使用开关。几乎验证了注释的使用,以防下一个程序员看不到它。
      【解决方案4】:

      您也可以在运行时使用 .htaccess 文件更改该大小,而无需更改您的 php.ini 文件

      php_value upload_max_filesize 1224M
      php_value post_max_size 1224M
      php_value max_execution_time 3000
      php_value max_input_time 3000
      

      复制该代码并放置您的文件,然后将该文件与索引文件一起存储,然后您运行您的项目,您还可以上传 1GB 文件

      更多详情read this article

      【讨论】:

        【解决方案5】:

        这是一个单一的函数,实现了 AoEmaster 的原始想法。 该函数返回整数(字节数)。

        function _GetMaxAllowedUploadSize(){
            $Sizes = array();
            $Sizes[] = ini_get('upload_max_filesize');
            $Sizes[] = ini_get('post_max_size');
            $Sizes[] = ini_get('memory_limit');
            for($x=0;$x<count($Sizes);$x++){
                $Last = strtolower($Sizes[$x][strlen($Sizes[$x])-1]);
                if($Last == 'k'){
                    $Sizes[$x] *= 1024;
                } elseif($Last == 'm'){
                    $Sizes[$x] *= 1024;
                    $Sizes[$x] *= 1024;
                } elseif($Last == 'g'){
                    $Sizes[$x] *= 1024;
                    $Sizes[$x] *= 1024;
                    $Sizes[$x] *= 1024;
                } elseif($Last == 't'){
                    $Sizes[$x] *= 1024;
                    $Sizes[$x] *= 1024;
                    $Sizes[$x] *= 1024;
                    $Sizes[$x] *= 1024;
                }
            }
            return min($Sizes);
        }
        

        如果需要,可以将其与以下函数结合使用,将输出呈现为人类可读的文本。

        function _Byte2Size($bytes,$RoundLength=1) {
            $kb = 1024;         // Kilobyte
            $mb = 1024 * $kb;   // Megabyte
            $gb = 1024 * $mb;   // Gigabyte
            $tb = 1024 * $gb;   // Terabyte
        
            if($bytes < $kb) {
                if(!$bytes){
                    $bytes = '0';
                }
                return (($bytes + 1)-1).' B';
            } else if($bytes < $mb) {
                return round($bytes/$kb,$RoundLength).' KB';
            } else if($bytes < $gb) {
                return round($bytes/$mb,$RoundLength).' MB';
            } else if($bytes < $tb) {
                return round($bytes/$gb,$RoundLength).' GB';
            } else {
                return round($bytes/$tb,$RoundLength).' TB';
            }
        }
        

        这样使用:

        echo 'Max allowed upload size: '._Byte2Size(_GetMaxAllowedUploadSize());
        

        结果可能是:

        最大允许上传大小:500 MB

        【讨论】:

          【解决方案6】:

          您可以使用 ini_set() 设置最大文件上传大小

            ini_set('post_max_size', '64M');
            ini_set('upload_max_filesize', '64M');
          

          或 使用 .htaccess 文件

          php_value upload_max_filesize 
          php_value post_max_size 
          

          【讨论】:

          • 其中一些设置可以在 .php 脚本中使用 ini_set 进行更改,而有些则不能。有关完整列表,请参阅 php.net/manual/en/ini.list.php。例如 post_max_size 说:“PHP_INI_PERDIR PHP_INI_SYSTEM in PHP php.net/manual/en/configuration.changes.modes.php PHP_INI_PERDIR 条目可以在 php.ini、.htaccess、httpd.conf 或 .user.ini 中设置(自 PHP 5.3 起)所以 post_max_size 不能在 PHP 脚本中通过以下方式设置ini_set().
          猜你喜欢
          • 2011-02-15
          • 1970-01-01
          • 2011-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-26
          • 2022-07-01
          相关资源
          最近更新 更多