IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Upload d'image en local sous easyphp


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Points : 101
    Points
    101
    Par défaut [Upload] Upload d'image en local sous easyphp
    bonsoir à tous,

    je commence l'upload d'image. j'ai lu deux tutoriels à ce sujet fort intéressants.
    J'ai donc réalisé mon formulaire et mon fichier de traitement sous Easyphp en local.
    Les voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html><head><title>chargement des photos</title></head>
     
    <body>
     
    <form method="post" action="chargement_photo.php" enctype="multipart/form-data">
         <label for="mon_fichier">image (Tous formats | max. 1Mo):</label><br />
         <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
         <input type="file" name="mon_image" id="mon_image" /><br />
         <input type="submit" name="submit" value="Envoyer" />
    </form>
     
    </body>
    </html>
    et...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <html><body><?php
     
    if ($_FILES['mon_image']['error'] > 0) $erreur = "Erreur lors du tranfsert";
    if ($_FILES['mon_image']['size'] > $maxsize) $erreur = "Le fichier est trop gros";
     
    $image_sizes = getimagesize($_FILES['mon_image']['tmp_name']);
    if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) $erreur = "Image trop grande";
     
    $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
    $extension_upload = substr(  strrchr($_FILES['mon_image']['name'], '.')  ,1);
    if ( in_array($extension_upload,$extensions_valides) ) echo "Extension correcte";
     
    $nom = microtime();
    $nom = "mes_fichiers/".str_replace(' ','',$nom);
    $resultat = move_uploaded_file($_FILES['icone']['tmp_name'],$nom);
    if ($resultat) echo "Transfert réussi";
     
    ?></body></html>
    on me répond que l'extension est correcte. Parfait mais le transfert semble échoué...
    Pouvez-vous dans ce cas me dire :

    1 : quelles sont mes (nombreuses) fautes ?
    2 : où puis-je trouver le répertoire tmp_name ?

    En espérant que je n'abuse pas de votre temps,
    Merci d'avance

  2. #2
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    1) Pourquoi ne pas indiquer le chemin absolut ?
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chemin = "/chemin/absolut/vers/mes_fichiers/".str_replace(' ','',$nom);
    $resultat = move_uploaded_file($_FILES['icone']['tmp_name'],$nom)
    Si $resultat = move_uploaded_file(..) renvoie faux, c'est surement qu'apache n'a pas la permission d'écrire dans le dossier en question, deux solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chmod 777 /chemin/absolut/vers/mes_fichiers/
    #ou
    chown apache /chemin/absolut/vers/mes_fichiers/
    #Cette solution ne vous est pas forcément adaptée
    Bien sur, il faut aussi s'assurer que le dossier en question existe n'est ce pas ...

    2) Pour connaitre le répertoire, il suffisait de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_FILES['mon_image']['tmp_name'];
    Mais il s'agit de la variable upload_tmp_dir dans le fichier php.ini
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  3. #3
    En attente de confirmation mail
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    bon alors, j'arrêtes pas de parcourir le site (forum et faq) et j'arrive toujours pas à uploader :
    le chmod de mon dossier d'upload est bien à 777 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dest_dossier = 'image/';  
    	chmod($dest_dossier,777);
    mon fichier est bien OK (bonne extension et bonne taille)

    mais la fonction qui merde, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    move_uploaded_file($_FILES['avatar']['tmp_name'], $dest_dossier . $dest_fichier);
    Et la variable $_FILES['avatar']['tmp_name'] me renvoit une chaine vide

    Dans PHP.ini, j'ai bien défini le dossier d'upload :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;
     
    ; Whether to allow HTTP file uploads.
    file_uploads = On
     
    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    upload_tmp_dir = "D:\Site\Site\tmp\"
     
    ; Maximum allowed size for uploaded files.
    upload_max_filesize = 2M
    Help please... je ne vois pas où est l'erreur

    Voici mon code complet (pompé ici )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    if(isset($_FILES['avatar'])) {  
    	$extensions_ok = array('JPG','jpg','jpeg','JPEG'); 
    	$taille_max = 3000000; 
    	$dest_dossier = 'image/';  
    	chmod($dest_dossier,777);
    	if( !in_array( substr(strrchr($_FILES['avatar']['name'], '.'), 1), $extensions_ok ) )  
    	{  
    		$erreur = 'Veuillez sélectionner un fichier de type jpg, chaque fichier doit faire moins de 3Mo et ne contenir aucun accents !'; 
    	}  
    	elseif( file_exists($_FILES['avatar']['tmp_name']) 
    	and filesize($_FILES['avatar']['tmp_name']) > $taille_max)  
    	{  
    		$erreur = 'Votre fichier doit faire moins de 3Mo !'; 
    	}  
    	else { echo 'fichier OK'.'<br>';}
    	// copie du fichier  
    	if(!isset($erreur))  
    	{
    	$dest_fichier = basename($_FILES['avatar']['name']);
    	echo $dest_fichier.'<br>';
    	echo 'tmp='.$_FILES['avatar']['tmp_name'].'<br>';
    	 // formatage nom fichier  
    	 // enlever les accents  
    	 $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); 
    	 // copie du fichier  
    	 $tr= move_uploaded_file($_FILES['avatar']['tmp_name'], $dest_dossier . $dest_fichier); 
    	 if ($tr){$erreur = 'transfère ok'; }
    	 else {$erreur = 'erreur';}
    	 }
    }
    else {$erreur='file non seté<br>';}
    echo $erreur.'<br>';
    Y a-t-il un mode Debug pour savoir ce qui a merdé sur la fonction move_uploaded_file ?

    Merci d'avance
    ++
    Memes

  4. #4
    En attente de confirmation mail
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    OK, c'est bon, j'ai pris le tuto :
    Comment envoyer un fichier depuis le navigateur sur le serveur à travers un formulaire HTML ?

    et çà marche,

    Va comprendre, tous les autre code du site ne marchaient pas...

    Enfin, je pense que le bug est devant l'écran et pas dérrière

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/03/2007, 22h16
  2. [Upload] Upload FTP avec image > 1Mo
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2007, 13h09
  3. [Upload] upload d'une image
    Par emna_icn dans le forum Langage
    Réponses: 11
    Dernier message: 04/05/2006, 23h14
  4. [Upload] Upload d'une image
    Par Seth77 dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2006, 11h00
  5. [Upload] upload de fichier images
    Par omlip dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2006, 23h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo