====== Upload de fichier en PHP ======
Notes :
* Liste à pucesi la taille du fichier envoyé dépasse ''upload_max_filesize'', la variable ''$_FILES'' contiendra, entre autres choses, l'erreur rencontrée. Tandis que si le formulaire complet (y compris le fichier) dépasse la configuration ''post_max_size'', le formulaire ne sera pas transmis à PHP. Cela veut dire que ''$_POST'' et ''$_FILES'' seront vides. Pour détecter ce dernier cas, une solution peut être, [[http://stackoverflow.com/a/9908619/863323|comme évoqué ici]], de vérifier que ''$_POST'' est vide, mais que ''$_SERVER['CONTENT_LENGTH']'' a une valeur supérieure à 0.
* http://php.net/manual/en/features.file-upload.errors.php
Quelques fonctions utilitaires liées à l'envoi de fichier via un formulaire avec ''%%%%''.
public static function getFileUploadMaxSize() {
$upload_max_filesize = ini_get('upload_max_filesize');
$upload_max_filesize_bytes = self::sizeStringToByte($upload_max_filesize);
$post_max_size = ini_get('post_max_size');
$post_max_size_bytes = self::sizeStringToByte($post_max_size);
if($upload_max_filesize_bytes < $post_max_size_bytes) {
return $upload_max_filesize;
} else {
return $post_max_size;
}
}
public static function sizeStringToByte($string) {
$size = (float)mb_substr($string, 0, -1);
$unit = mb_strtolower(mb_substr($string, -1));
return (int)round($size * pow(1024, strpos('bkmgtpezy', $unit)));
}
public static function sizeByteToString($bytes) {
$units = 'bkmgtpezy';
$value = $bytes;
while ($value > 1024 && $unit_rank < 8) {
$value / 1024;
$unit_rank++;
}
return round($value, 2).$units[$unit_rank]);
}