2010-05-15 79 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

相關問題