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