2010-05-15 19 views

Respuesta

40

La carga está limitada por tres opciones: upload_max_filesize, post_max_size y memory_limit. Su carga solo se realiza si no se ejecutó una de ellas.

La función 0 ini_get() le proporciona una mano corta del límite y se debe convertir primero. Thx a AoEmaster para esto.

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

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

+7

Cabe señalar que esta no da cuenta de la taquigrafía notación en archivos ini, por lo que si tiene un límite de "64M" se analizará como 64. Es mejor convertir todo en bytes antes de comparar. –

+0

Estoy de acuerdo con Brady, la mayoría de los archivos ini que veo ahora usan notación abreviada. –

+0

Consulte esta conversión http://stackoverflow.com/questions/13076480/php-get-actual-maximum-upload-size – Shane

12

Uso ini_get para obtener el valor de configuración actual:

ini_get('upload_max_filesize') 
3

También puede cambiar ese tamaño en tiempo de ejecución utilizando el archivo .htaccess sin la necesidad de cambiar el archivo 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 

copiar el código y poner su archivo, luego almacenar ese archivo con el archivo de índice y luego ejecutar su proyecto también es capaz de cargar archivos de 1GB

para más detalles read this article

+1

Esta no es una respuesta a la pregunta ... –

-1

Puede establecer el tamaño máximo del archivo de carga usando ini_set()

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

o utilizando el archivo .htaccess

php_value upload_max_filesize 
php_value post_max_size 
+0

Algunas de estas configuraciones se pueden cambiar dentro de un script .php usando ini_set, y otras no. Consulte http://php.net/manual/en/ini.list.php para obtener la lista completa. Por ejemplo, post_max_size dice: "PHP_INI_PERDIR \t PHP_INI_SYSTEM en PHP <= 4.2.3. Disponible desde PHP 4.0.3." Con el fin de descifrar lo que significa "PHP_INI_PERDIR", ver http://php.net/manual/en/configuration.changes.modes.php PHP_INI_PERDIR \t entrada se puede fijar en php.ini, .htaccess, httpd. conf o .user.ini (desde PHP 5.3) Así que no se puede establecer el valor de pos_max_size en un script PHP a través de 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 poco más de explicación además de solo un bloque de código sería mucho más útil. –

+0

Lo siento, soy francés, no puedo explicarlo en un buen inglés. Solo quiero ayudar y compartir mi solución. – AoEmaster

+0

Alternativa muy similar: http://stackoverflow.com/a/22500394/1227297 –

0

Aquí hay una sola función, la aplicación de la idea original de AoEmaster . La función devuelve un entero (cantidad de bytes).

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

Si lo desea, se puede combinar con la siguiente función que hace que la salida como un texto legible por humanos.

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 de esta manera:

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

Un resultado podría ser:

Max permitió tamaño de subida: 500 MB

Cuestiones relacionadas