Résolu PHP - upload dans un repertoire selon l'extension

Solutions (11)
Tags :
  • Php
  • Upload
  • Programmation
, Vieux c*n psychorigide |
Salut,

J'ai intégré dans mon site un uploader de fichier, vu mes connaissances en php j'ai juste pompé le script sur un site. L'upload fonctionne mais je voudrais que le fichier aille dans un répertoire selon son extension ( /image/ pour les jpg,gif,png /documents/ pour odt, pdf ect ... )

Voila le code actuel ( le site a prévenu que c'était pas le top en matière de sécurité, mais cette partie du site est protégée par un htaccess :D  )

  1. <?
  2. // Taille maximum
  3. $MAX_FILE_SIZE = 150000;
  4.  
  5. // Dossier de destination du fichier
  6. $folder = "upload/";
  7.  
  8. // Tableau array des différents types
  9. $allowed_types = array("image/bmp", "image/gif", "image/pjpeg", "image/jpeg", "image/jpg", "multipart/x-zip", "video/msvideo");
  10.  
  11. // Variables récupérée par methode POST du formulaires
  12. $fname = $HTTP_POST_FILES['fichier']['name'];
  13. $ftype = $HTTP_POST_FILES['fichier']['type'];
  14. $fsize = $HTTP_POST_FILES['fichier']['size'];
  15. $ftmp = $HTTP_POST_FILES['fichier']['tmp_name'];
  16.  
  17. // Diverses test afin de savoir si :
  18. // Le format de fichier correspond à notre tableau array
  19. if(!in_array($ftype, $allowed_types)){$error = 1;}
  20.  
  21. // La taille du fichier n'est pas dépassée
  22. if($fize > $MAX_FILE_SIZE){$error = 2;}
  23.  
  24. // Le fichier n'existe pas déjà
  25. if(file_exists($folder."m_".$fname)){$error = 3;}
  26.  
  27. // Si tout va bien, c'est bien déroulé
  28. if(copy($ftmp,''.$folder.''.$fname.'')) {$error = 0;}
  29.  
  30. // Switch servant simplement à la gestion des erreures
  31. switch($error){
  32. case'0':
  33. echo("Fichier correctement envoyé, vous allez être redirigé");
  34. break;
  35. case'1':
  36. echo("Format de fichier incorrect, redirection en cours");
  37. break;
  38. case'2':
  39. echo("Fichier trop volumineux, redirection en cours");
  40. break;
  41. case'3':
  42. echo("Fichier déjà existant, redirection en cours");
  43. break;
  44. }
Contenus similaires
Meilleure solution
partage
|
Tu peux essayer d'utiliser le tableau des extensions valides, et faire quelque chose comme:
  1. switch (array_search($ftype, $allowed_types)) {
  2. case 0: // image bmp
  3. case 1: // image gif
  4. case 2: // image gif
  5. ... (tous les index des formats images)...
  6. $folder = "upload/images/";
  7. break;
  8. case 5: // zip
  9. $folder = "upload/zip/";
  10. break;
  11. case 7: // disons .odt
  12. case 8: // on va dire .doc
  13. $folder = "upload/documents/";
  14. break;
  15. }

  • Commenter cette solution |
Score
0
òh
òi
, Vieux c*n psychorigide |
J'ai mis le chmod 777 aux dossiers, mon hebergeur c'est olikeopen .
Je vais voir ce que donne move_uploaded_file()
Site de l'herbegeur down :lol: 
  • Commenter cette réponse |
Score
0
òh
òi
|
Je plussoie l'utilisation du move_uploaded_file().
Et si les sous-répertoires n'existent pas, la copie (ou le move) ne les créent pas.
Il faut donc vérifier qu'ils existent et soient en chmod 777.
  • Commenter cette réponse |
Score
0
òh
òi
|
Moi, perso j'ai toujours utilisé : http://php.net/manual/fr/function.move-uploaded-file.ph...

Tu n'aurais pas un chmod à appliquer ? Quel est ton hébergeur ?
  • Commenter cette réponse |
Score
0
òh
òi
, Vieux c*n psychorigide |
crazycat@idn a dit :
Heu, je ne comprends pas le souci, malgré la différence de gras les chemins semblent identiques.


Le gras montrait le répertoire :o 

Citation :
/dossier/upload/images

C'était pour montrer où est uploadé le fichier (/dossier) par rapport à là où il devrait être (/images), si tu préfères:

/dossier/
au lieu de :
/dossier/upload/images


Citation :
Dans ce cas controle la valeur reçu de $ftype afin de tester tes if/else (et le plus jolie reste un switch comme te l'a montré mon petit crazy padawan modéro !)


Dans la phrase de confirmation de l'upload j'ai ajouté un $ftype pour afficher la variable et je reçois image/jpeg c'est ça le contrôle de la valeur reçue ?
et application/zip pour un fichier .zip
et application/pdf pour un pdf
  • Commenter cette réponse |
Score
0
òh
òi
|
Dans ce cas controle la valeur reçu de $ftype afin de tester tes if/else (et le plus jolie reste un switch comme te l'a montré mon petit crazy padawan modéro !)




;D
  • Commenter cette réponse |
Score
0
òh
òi
|
Heu, je ne comprends pas le souci, malgré la différence de gras les chemins semblent identiques.
  • Commenter cette réponse |
Score
0
òh
òi
, Vieux c*n psychorigide |
Oui ça a aussi été corrigé entre mon 2ème et 3ème edit :D 
Là j'en suis à mon post de 13h44 .
  • Commenter cette réponse |
Score
0
òh
òi
|
Normal, c'est $ftype qu'il faut utiliser.
  • Commenter cette réponse |
Score
0
òh
òi
, Vieux c*n psychorigide |
Meilleure réponse sélectionnée par archipeldufond.
  • Commenter cette réponse |
Score
0
òh
òi
, Vieux c*n psychorigide |
  1. // Dossier de destination du fichier
  2. if ( $ftype=="image/jpeg" )
  3. {
  4. $folder="/upload/images/";
  5. }
  6. else if ( $ftype=="image/jpg" )
  7. {
  8. $folder="/upload/images/";
  9. }
  10. else if ( $ftype=="multipart/x-zip" )
  11. {
  12. $folder="/upload/docs/";
  13. }


Les fichiers s'uploadent, mais dans le mauvais répertoire par exemple une image va dans

/dossier/upload/images
au lieu de
/dossier/upload/images
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS