Vla un petit script pratique pour connaître la taille maximum autorisée par fichier pour le téléchargement de fichier.
Je pense que cela, sera utile et pourra servir à certains d'entre nous.
Ce script ce base sur la configuration du serveur et utilise ces variables:
- memory_limit
- post_max_size
- upload_max_filesize
:arrow: Convertit les valeurs extraites du fichier de configuration (php.ini).
* utilisé dans la fonction taille_max_dl_fichier()
:arrow: En fonction de la configuration du serveur et du nombre de fichier à télécharger on calcul la taille max possible par fichier.
* une marge peut être utilisée ou non pour indiquer que le formulaire est susceptible de retourner d'autre éléments
(on indique la taille en octets à soustraire, 0 si aucune marge souhaitée)
* par rapport à memory_limit, on laisse 1,5 fois de place pour le traitement des fichiers en simultanées
:arrow: La fonction traite automatiquement l'affichage de l'unité, en fonction de la taille.
:arrow: Utilisation des fonctions.
* convert_taille() n'est pas nécessaire s'il le resultat n'est pas prévu pour l'affichage
Voila. Si vous voyez des erreurs n'hésitez pas.
S'il faut plus de commentaires, j'essayerais de faire mieux :wink:
note:
Le script calcule la taille maximum que peut faire chaque fichier pour le dl, mais il se base également sur memory_limit pour un traitement simultanée des fichiers téléchargés.
Il est donc possible de modifier le degré de marge pour la mémoire vive.
(augmenter / diminuer / supprimer l'adition du 1.5) : $taille_max_dl = $post_max_size / ($nb_fichier + 1.5);
Il est donc possible d'enlever entièrement ce paramètre si les fichiers ne seront pas traités en même temps pour avoir une plus grande taille par fichier autorisé.
Dans tout les cas, la taille de téléchargement par fichier ne pourra pas dépasser upload_max_filesize.
Je pense que cela, sera utile et pourra servir à certains d'entre nous.
Ce script ce base sur la configuration du serveur et utilise ces variables:
- memory_limit
- post_max_size
- upload_max_filesize
:arrow: Convertit les valeurs extraites du fichier de configuration (php.ini).
* utilisé dans la fonction taille_max_dl_fichier()
Code:
// retourne la valeur en octet/bytes
function return_bytes($val)
{
$val = trim($val);
$unite = strtolower($val{strlen($val)-1});
switch($unite)
{
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
:arrow: En fonction de la configuration du serveur et du nombre de fichier à télécharger on calcul la taille max possible par fichier.
* une marge peut être utilisée ou non pour indiquer que le formulaire est susceptible de retourner d'autre éléments
(on indique la taille en octets à soustraire, 0 si aucune marge souhaitée)
* par rapport à memory_limit, on laisse 1,5 fois de place pour le traitement des fichiers en simultanées
Code:
function taille_max_dl_fichier($nb_fichier,$marge = 512000)
{
$post_max_size = @ini_get('post_max_size');
if(empty($post_max_size))
{
$post_max_size = @get_cfg_var('post_max_size');
if(empty($post_max_size))
$post_max_size = '6M';
}
$memory_limit = @ini_get('memory_limit');
if(empty($memory_limit))
{
$memory_limit = @get_cfg_var('memory_limit');
if(empty($memory_limit))
$memory_limit = '6M';
}
$upload_max_filesize = @ini_get('upload_max_filesize');
if(empty($upload_max_filesize))
{
$upload_max_filesize = @get_cfg_var('upload_max_filesize');
if(empty($upload_max_filesize))
$upload_max_filesize = '2M';
}
$post_max_size = return_bytes($post_max_size);
$memory_limit = return_bytes($memory_limit);
$upload_max_filesize = return_bytes($upload_max_filesize);
if($memory_limit < $post_max_size)
$post_max_size = $memory_limit;
// on enleve 500 Ko pour le reste
$post_max_size = $post_max_size - $marge;
$memory_limit = $memory_limit - $marge;
$taille_max_dl = $post_max_size / ($nb_fichier + 1.5);
if($taille_max_dl > $upload_max_filesize)
$taille_max_dl = $upload_max_filesize;
return $taille_max_dl;
}
:arrow: La fonction traite automatiquement l'affichage de l'unité, en fonction de la taille.
Code:
// permet de convertir à l'unité la plus proche pour l'affichage
function convert_taille($taille_octet)
{
if($taille_octet < 1024)
return $taille_octet.' Oc.';
elseif($taille_octet >= 1024 && $taille_octet < 1048576)
return round($taille_octet/1024,2).' Ko.';
elseif($taille_octet >= 1048576 && $taille_octet < 1073741824)
return round(($taille_octet/1024)/1024,2).' Mo.';
elseif($taille_octet >= 1073741824)
return round((($taille_octet/1024)/1024)/1024,2).' Go.';
}
:arrow: Utilisation des fonctions.
* convert_taille() n'est pas nécessaire s'il le resultat n'est pas prévu pour l'affichage
Code:
echo convert_taille(taille_max_dl_fichier(4));
Voila. Si vous voyez des erreurs n'hésitez pas.
S'il faut plus de commentaires, j'essayerais de faire mieux :wink:
note:
Le script calcule la taille maximum que peut faire chaque fichier pour le dl, mais il se base également sur memory_limit pour un traitement simultanée des fichiers téléchargés.
Il est donc possible de modifier le degré de marge pour la mémoire vive.
(augmenter / diminuer / supprimer l'adition du 1.5) : $taille_max_dl = $post_max_size / ($nb_fichier + 1.5);
Il est donc possible d'enlever entièrement ce paramètre si les fichiers ne seront pas traités en même temps pour avoir une plus grande taille par fichier autorisé.
Dans tout les cas, la taille de téléchargement par fichier ne pourra pas dépasser upload_max_filesize.