begin process at 2012 05 27 20:03:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > ENREGISTREMENT DE FICHIERS

ENREGISTREMENT DE FICHIERS


 Information sur la source

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Niveau :Débutant Date de création :07/05/2005 Date de mise à jour :07/05/2005 12:08:19 Vu :5 131

Auteur : manu33127

Ecrire un message privé
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

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

Source

  • <?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 &eacute;t&eacute; &eacute;fectu&eacute;!! <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&ugrave; ".$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>
<?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 &eacute;t&eacute; &eacute;fectu&eacute;!! <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&ugrave; ".$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>



 Historique

07 mai 2005 12:08:19 :
la c'est mieux!!!

 Sources du même auteur

Source avec Zip ESPACE SÉCURISÉ AVEC FORUM ET ESPACE ADMINISTRATEUR
Source avec Zip Source avec une capture GESTION DE FACTURE

 Sources de la même categorie

SUPPRESSION AUTOMATIQUE DES FICHIERS RAW ORPHELINS APRÈS UN ... par malokaff
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151

Commentaires et avis

Commentaire de Anthomicro le 07/05/2005 12:30:12

Salut,

vérifie le type mime du fichier au lieu de vérifier son extension... Avec ton système on peut uploader ce qu'on veut...

a +

Commentaire de manu33127 le 07/05/2005 13:44:24

ok merci du conseil !!! Je vais coriger sa !!
a+

Commentaire de coucou747 le 08/05/2005 13:12:24 administrateur CS

on n'avait pas finit le débat la dessus...
Comment récupérer le type ?
je t'avais montré que $FILE_['photo']['type'] n'était pas efficace...

Commentaire de Anthomicro le 08/05/2005 13:41:26

http://fr.php.net/manual/fr/function.exif-imagetype.php

et hop c'est torché

Commentaire de Anthomicro le 08/05/2005 13:44:04

d'ailleurs afin d'être convaincu j'aimerais bien que tu nous montre via telnet comment uploader n'importe quoi sur un serveur qui vérifie à l'aide du tableau $_FILES

;-)

Commentaire de coucou747 le 08/05/2005 17:26:20 administrateur CS

je t'écris un tuto.... attends quelques semaines/jours/...

Commentaire de Anthomicro le 08/05/2005 17:30:03

ok ;-)

Commentaire de manu33127 le 08/05/2005 17:59:08

pourquois : $FILE_['photo']['type'] n'était pas efficace ???

Commentaire de Anthomicro le 08/05/2005 18:00:05

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 ;-)

Commentaire de manu33127 le 08/05/2005 19:48:26

coucou : je veux bien voir ton tuto aussi

Commentaire de coucou747 le 08/05/2005 20:26:43 administrateur CS

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...

Commentaire de Anthomicro le 08/05/2005 20:47:51

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

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales