2010-05-15 7 views

risposta

40

L'upload è limitata da tre opzioni: upload_max_filesize, post_max_size e memory_limit. Il tuo caricamento è fatto solo se non supera uno di questi.

La funzione ini_get() fornisce una piccola mano del limite e deve essere convertita per prima. Da Thx a AoEmaster per questo.

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); 
} 

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

+7

Va notato che questo non tiene conto di stenografia notazione in file ini, quindi se hai un limite di "64M" verrà analizzato come 64. Meglio per convertire tutti in byte prima di confrontare. –

+0

Sono d'accordo con Brady, la maggior parte dei file ini che vedo ora usano la notazione abbreviata. –

+0

Vedere questa conversione http://stackoverflow.com/questions/13076480/php-get-actual-maximum-upload-size – Shane

12

Usa ini_get per ottenere il valore di configurazione corrente:

ini_get('upload_max_filesize') 
3

Si può anche cambiare la dimensione in fase di esecuzione utilizzando il file .htaccess senza la necessità di modificare il file 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 

copiare il codice e mettere la vostra file, quindi archiviare quel file con il file indice, quindi si esegue il progetto è anche in grado di caricare file 1GB

per ulteriori dettagli read this article

+1

Questa non è una risposta alla domanda ... –

-1

È possibile impostare Dimensioni massime file caricare con ini_set()

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

o usando il file .htaccess

php_value upload_max_filesize 
php_value post_max_size 
+0

Alcune di queste impostazioni possono essere modificate all'interno di uno script .php utilizzando ini_set, mentre altre no. Vedi http://php.net/manual/en/ini.list.php per l'elenco completo. Per esempio post_max_size dice: "PHP_INI_PERDIR \t PHP_INI_SYSTEM in PHP <= 4.2.3 Disponibile da PHP 4.0.3." Al fine di decifrare cosa significa "PHP_INI_PERDIR" significa, vedere http://php.net/manual/en/configuration.changes.modes.php PHP_INI_PERDIR \t iscrizione può essere impostata in php.ini, .htaccess, httpd. conf o .user.ini (dal PHP 5.3) Quindi post_max_size non può essere impostato in uno script PHP tramite ini_set(). –

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

Un po 'più di una spiegazione oltre a un blocco di codice sarebbe molto più utile. –

+0

Scusa se sono francese, non riesco a spiegarlo in inglese. Voglio solo aiutare e condividere la mia soluzione. – AoEmaster

+0

Alternativa molto simile: http://stackoverflow.com/a/22500394/1227297 –

0

Ecco una singola funzione, attuare l'idea originale da AoEmaster . La funzione restituisce numero intero (quantità di byte).

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); 
} 

Se lo si desidera, è possibile combinarlo con la seguente funzione che rende l'output come testo leggibile.

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'; 
    } 
} 

usarlo in questo modo:

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

Un risultato potrebbe essere:

massima consentita dimensioni upload: 500 MB

Problemi correlati