PHP : envoi de fichier
Dépassement de taille :
Voir documentation : http://php.net/manual/en/features.file-upload.errors.php
- si la taille du fichier envoyé dépasse
upload_max_filesize, la variable$_FILEScontiendra, entre autres choses, l’erreur rencontrée. - 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$_POSTet$_FILESseront vides. Pour détecter ce cas, une solution peut être, comme évoqué ici, de vérifier que$_POSTest vide, mais que$_SERVER['CONTENT_LENGTH']a une valeur supérieure à 0.
Fonctions utiles
Quelques fonctions utilitaires liées à l’envoi de fichier via un formulaire avec <input type="file">.
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]);
}