Le blog de Nukleo

Upload des fichiers zip avec CodeIgniter

8 avril 2011 dans Développement |

Grâce à la librairie file_upload, CodeIgniter permet de facilement gérer l’upload de fichiers mais dans le cas de fichiers ZIP il y a un petit bug qui n’est pas encore corrigé et qui peut faire échouer l’upload. Voici comment le corriger rapidement.

Le problème

Pour pouvoir faire de l’upload il faut déclarer les types de fichiers acceptés dans son controlleur (ou dans un fichier de config) à l’aide de la déclaration

$config['allowed_types'] = 'gif|jpg|png|zip';

Lors de la soumission du formulaire contenant le fichier a envoyer, le navigateur envoi un mime type au serveur correspondant au type de fichier que l’on souhaite uploader. CodeIgniter va ensuite confronter ce mime type avec ceux qui sont autorisés et agir en conséquence.

Le problème vient du fait que les navigateurs n’envoyent pas tous le même mime type pour les fichiers ZIP et, après recherche, il s’avère qu’il en existe 7 différents. Hors CodeIgniter n’en prend en charge que 3. Donc si votre navigateur envoi l’un des 4 types non répertoriés, l’upload échoue avec un magnifique message d’erreur : « The filetype you are attempting to upload is not allowed. »

La solution

Il suffit d’éditer le fichier application/config/mimes.php en ajoutant les mime types manquants à la ligne correspondant à votre type de fichier. Dans le cas d’un fichier ZIP il s’agit de la ligne 54 :

'zip'	=>  array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),

qu’il faut changer en

'zip'	=>  array('application/x-zip', 'application/zip', 'application/x-zip-compressed','application/octet-stream','application/x-compress','application/x-compressed','multipart/x-zip'),

Et tout rentre dans l’ordre :)

Ajouter d’autre mime types

Si vous deviez ajouter de nouveaux types de fichiers à la liste des fichiers autorisés ou qu’un type existant posait le même problème que pour les ZIP, il suffit de faire un simple

var_dump($_FILES)

et de repérer le résultat de ["file_type"] dans l’array retourné. C’est cette information qu’il faudra ajouter au fichier application/config/mimes.php.

Mots-clés :

Vous avez aimé l'article ? Partagez-le : 

Les commentaires sont fermés.