Enregistrement de fichiers

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 468 fois - Téléchargée 29 fois

Contenu du snippet

Enregistrement du fichier (pdf, jif, jpg, png, ...) sur le serveur http

Source / Exemple :


<?php
$erreur = "";
       
function enregistre_img ($fichier,$extensions_ok, $taille_max, $dest_dossier , &$erreur){
      //$fichier : fichier a traiter
      // $extensions_ok : les type de fichier doit etremis en argument dans un tableau (array).
      //$taille_max : la tail max est en octets
      // $dest_dossier : destinations du nouveau l'enregistrement (ex : "toto/")
      // $erreur : Variable d'erreur passe par adresse
      //si l'enregistrement a echoué on retoure 1 sino on retoure le nom du fichier enegistrer
      if ( $fichier['photo']['error'] != 0){      //verifier si il n'y a pas d'erreur : 1, 2, 3, 4, 5
           $erreur .= "Erreur sur le fichier : ".$fichier['photo']['name']." l'opération n'a pas été éfectué!! <br>\n";
           return 1;
      }
      elseif( !in_array( substr(strrchr($fichier['photo']['name'], '.'), 1), $extensions_ok ) ){ //l'extention n'est pas acepter
           // extraire tou les elements (extention accepter) du tableau
           $extensions = "";
           foreach($extensions_ok as $value){
                $extensions .= " où ".$value ;
           }
           $extensions = substr($extensions, 10);
           $erreur .= "Veuillez sélectionner un fichier de type : $extensions !";
           return 1;
      }

      elseif( $fichier['photo']['size'] > $taille_max){ //Verifier si la taille est plus petit que la taille max autorisé (par $taille_max)
              $erreur .= "Votre fichier doit faire moins de : ".($taille_max/1024)."Ko  !";
              return 1;
      }

      else{   //si le fichier n'a pas d'erreur
            $dest_fichier = basename($fichier['photo']['name']);
            //remplacer les caracteres accent
            $dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
            // remplacer les caracteres autres que lettres, chiffres et point par _
            $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
            move_uploaded_file($fichier['photo']['tmp_name'], $dest_dossier . $dest_fichier);  //enregistrement sur le disk
            $erreur .= "Votre fichier \"$dest_fichier\" est enregistr&eacute";
            return "$dest_fichier";
      }

}

?>

<html>
<body>
<?php
    if(isset($_FILES['photo'])){
        $extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'pdf');    //mise des extention autorise dans un tableau
        $fichier = enregistre_img ($_FILES,$extensions_ok,100000,"photo/",$erreur);
    }
    print $erreur; //imprime les erreurs
?>
<!-- Debut Formulaire -->
<!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
<form method="POST" action="Document4.php" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 500Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<fieldset>

<legend>Envoi de fichiers</legend>
<!-- champs d'envoi de fichier, de type file -->
<p><label for="photo">Photo :</label><input type="file" name="photo" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>

</fieldset>
</form>
<!-- Fin du Formulaire -->
</body>
</html>

A voir également

Ajouter un commentaire Commentaires
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
bah je te demande pas ça perso, je te demande d'exploiter la faille, tu m'as dit que via telnet c'était possible, je ne demande qu'à te croire perso ;-)

Donc j'attendrai ton tuto
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
j'ai un peu de mal à exploiter la faille (qui pourtant existe...) car la doc de http est vraiment compliquée...

je mettrais l'adresse ici quand j'aurais finit la rédaction...

en attendant, voici un upload : ce que dit le client (avant la fin de la requette, le serveur ne dit rien...)

POST /dossier/adresse.html'arg1=1&arg2=2 HTTP/1.1
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.3; Linux) KHTML/3.3.2 (like Gecko)
Referer: http://localhost/html/file_up.php?
Pragma: no-cache
Cache-control: no-cache
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Accept-Encoding: x-gzip, x-deflate, gzip, deflate
Accept-Charset: iso-8859-15, utf-8;q=0.5, *;q=0.5
Accept-Language: fr, en
Host: localhost:1793
Content-Type: multipart/form-data; boundary=----------sKrpTIViy6PTNVBu2bEdXUeSAbdk5ZSytKlKaE0XKQ0itActlrWIJBj

Content-Length: 76076

------------sKrpTIViy6PTNVBu2bEdXUeSAbdk5ZSytKlKaE0XKQ0itActlrWIJBj
Content-Disposition: form-data; name="fichier"; filename="errno.jpg"
Content-Type: image/jpeg

[...plein de caractères : ceux qui composent mon image...]

comme vous le voyez, le type est passé en argument... C'est cette chaine qui est placée dans $_FILES['fichier']['type']... En gros, suffirait de la modifier et on pourrait passer la "sécuritée" mais je crois que les deux chaines bizares en haut sont deux sommes md5, mais je ne sais pas exactement de quoi... l'une est pe celle d'un fichier tandis que l'autre serait cette de la partie content de la requette...
Messages postés
5
Date d'inscription
vendredi 18 février 2005
Statut
Membre
Dernière intervention
8 mai 2005

coucou : je veux bien voir ton tuto aussi
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
c'est envoyé par le navigateur, bref si tu ne passes pas par un navigateur tu peux gruger, c'est pour ça que je voudrais voir le tuto de coucou ;-)
Messages postés
5
Date d'inscription
vendredi 18 février 2005
Statut
Membre
Dernière intervention
8 mai 2005

pourquois : $FILE_['photo']['type'] n'était pas efficace ???
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.