2010-05-15 80 views

回答

40

上传由三个选项的限制:的upload_max_filesize的post_max_sizememory_limit的。你的上传只有在它没有执行其中一项时才会完成。

ini_get()函数为您提供了一个极限,并且应该首先进行转换。 Thx为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

+7

需要指出的是,这并不占速记ini文件中的符号,所以如果你有一个“64M”的限制,它将被解析为64.最好在比较之前将所有字节转换为字节。 – 2014-01-09 01:24:32

+0

我同意Brady,我看到的大多数ini文件现在都使用简写符号。 – 2014-02-24 17:03:21

+0

请参阅此转换http://stackoverflow.com/questions/13076480/php-get-actual-maximum-upload-size – Shane 2014-08-12 10:37:14

12

使用ini_get获取当前的配置值:

ini_get('upload_max_filesize') 
3

您可以在运行时使用.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

+1

这不是对问题的回答... – 2014-01-09 01:25:54

-1

可以使用的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 
+0

其中一些设置可以在.php脚本中使用ini_set更改,有些则不可以。查看http://php.net/manual/en/ini.list.php获取完整列表。例如post_max_size说: “PHP_INI_PERDIR \t PHP中的PHP_INI_SYSTEM <= 4.2.3。自PHP 4.0.3起可用。” 为了破译 “PHP_INI_PERDIR” 的意思,见http://php.net/manual/en/configuration.changes.modes.php PHP_INI_PERDIR \t项可以在php.ini,htaccess的,httpd的设置。 conf或.user.ini(自PHP 5.3起) 所以post_max_size不能通过ini_set()在PHP脚本中设置。 – 2017-03-20 20:44:56

2
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); 
} 
+1

除了一段代码之外,更多的解释会更加有用。 – 2014-06-28 23:43:06

+0

对不起,我是法国人,我无法用英语解释。我只是想帮助和分享我的解决方案。 – AoEmaster 2014-06-28 23:55:48

+0

非常类似的替代方法:http://stackoverflow.com/a/22500394/1227297 – 2014-08-11 10:03:36

0

这里有一个单一的功能,实现从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

相关问题