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 :

téléchargerment : image abimée


Sujet :

Langage PHP

  1. #1
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut téléchargerment : image abimée
    Bonjour, j'ai un script pho qui redimentione une image puis déclanche son téléchargement:
    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
    <?php
    if(isset($_FILES['photo']))
    { 
         $dossier = 'imgs/';
         $fichier = basename($_FILES['photo']['name']);
         if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !<br>';
               exec("mogrify -resize 640x640 imgs/".$fichier);
                  echo ("<meta http-equiv='Refresh' content='2;URL=telecharg.php?jpg=imgs/$fichier'>");
     
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
               echo ("<meta http-equiv='Refresh' content='2;URL=index.php'>");
         }
    }
    ?>
    C'est cette ligne qui lance le téléchargement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ("<meta http-equiv='Refresh' content='2;URL=telecharg.php?jpg=imgs/$fichier'>");
    En passant au script suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?PHP
     
    if(!isset($_GET['jpg'])) 
        {
           header('location:erreur.php');
        }
    else
        {
           $file = $_GET['jpg'];
        }
    header("Content-Type: image/jpeg"); 
    header("Content-Disposition: attachment; filename=".$file); 
     
    ?>
    Le téléchargement ce déclanche bien, il m'enregistre un fichier portant le nom est l'extenssion de l'image, mais aucun apercu n'est disponibkle pour l'image, donc elle est corompu, voyer vous ce qui cloche dans mon code ,

  2. #2
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    Par cette methode il faudrait écrire le contenu du fichier de telle manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    header("Content-Type: image/jpeg"); 
    header("Content-Disposition: attachment; filename=".$file); 
    readfile($file);
    exit();
    Attention à la sécurité !

    tonsite.com/download.php?jpg=mdp_bdd.php est un exemple parmis tant d'autres. En effet readfile ouvre un fichier sur ton serveur, et lit donc les sources en php.

  3. #3
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Bonjour et merci beaucoup

    c'est parfait

    Maintenant il faudrait que je supprime l'image, mais seulement une foi qu'elle a été télécharger, c'est possible ?

  4. #4
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Citation Envoyé par leodi Voir le message
    Attention à la sécurité !
    Que veut tu dire ?

    Quel sont les risque que j'encoure ?

  5. #5
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Donc j'ai rajouter un redierction ver un script de suppression dans le script de téléchargemlent:
    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
    <?PHP
     
    if(!isset($_GET['jpg'])) 
        {
           header('location:erreur.php');
        }
    else
        {
           $file = $_GET['jpg'];
        }
    header("Content-Type: image/jpeg"); 
    header("Content-Disposition: attachment; filename=".$file); 
    readfile($file);
    exit();
     
     
    echo ("<meta http-equiv='Refresh' content='2;URL=suppr.php?action=supprimer&fichier=$fichier'>");
     
    ?>
    Voici le script de suppression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    if ($_GET['action'] == 'supprimer') {
    unlink($_GET['fichier']);
    }
    echo ("<meta http-equiv='Refresh' content='2;URL=suppr_mp3.php'>");
     
    ?>
    Mais ce ne marche pas, pouriez vous m'aider ?

  6. #6
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    As tu un message d'erreur ?
    Et pour la sécurité, en fait readfile permet de lire la source des fichiers, donc si quelqu'un passe en parametre

    url?image=index.php

    Il pourra télécharger ton ficher index.php !

    Et pour le unlink, si il procède le même manière, il pourra supprimer tout ton site.
    Donc pense a une method pour restreindre ca. (vérification de l'extention, du chemin du fichier...)

    Sinon pour la suppression qui ne fonctionne pas, fais le unlink directement apres le téléchargement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    header("Content-Type: image/jpeg"); 
    header("Content-Disposition: attachment; filename=".$file); 
    readfile($file);
    unlink($file);
    exit();

  7. #7
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Merci encore pour ses informations

    Donc maintenant pour la suppression c'est bon, donc avant de supprimer l'image, comment tester s'il s'agit bien de l'image qui vient d'être uploader ?

  8. #8
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    Lors de l'upload tu peux par exemple mettre le chemin en session, en vérifiant bien que celui ci soit valide. Cela permettrait aussi d'éviter d'avoir a mettre le nom de l'image en paramètre GET. De cette façon l'utilisateur ne pourra pas bidouiller a son grès.
    Bon courage,
    Paul

  9. #9
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    merci encore

    Mais je ne sais pas comment faire, pourrai tu me donner un exemple ?

  10. #10
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    Le mieux est de lire des articles consacrés aux sessions, pour que tu saches bien comment cela fonctionne :

    http://php.developpez.com/cours/?page=securite#sessions

    Bon courage.
    Paul

  11. #11
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    ok j'étudirai ca plu tart, mais pour l'instant je voudrai juste tester si le nom du fichier a supprimer et bien celui de l'image uploder tu peut me monter un exemple ?

  12. #12
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    Lors de l'upload, tu stoques le contenu de $fichier en session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['upload_fichier'] = $fichier;
    Et lorsqu'il veut la télécharger, tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($_SESSION['upload_fichier'] == $_GET['file'])
    {
    //go
    }
    else
      die('Erreur');
    Avec les session_start(); aux bon endroits.

    Je te conseille vraiment de lire des articles sur les sessions avant de continuer. Sinon tu vas rencontrer un bon nombre de problèmes.

  13. #13
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    j'ai donc modifier deux script:


    le premier:
    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
    <?php
    
    
    if(isset($_FILES['photo']))
    { 
         $dossier = 'imgs/';
         $fichier = basename($_FILES['photo']['name']);
         if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
             $_SESSION['upload_fichier'] = $fichier;
              echo 'Upload effectué avec succès !<br>';
               exec("mogrify -resize 640x640 imgs/".$fichier);
                  echo ("<meta http-equiv='Refresh' content='2;URL=telecharg_suppr.php?jpg=imgs/$fichier'>");
    
    
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
               echo ("<meta http-equiv='Refresh' content='2;URL=index.php'>");
         }
    }
    
    
    ?>
    et le deuxième:
    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
    <?PHP
    if ($_SESSION['upload_fichier'] == $_GET['file'])
    {
    if(!isset($_GET['jpg'])) 
        {
           header('location:erreur.php');
        }
    else
        {
           $file = $_GET['jpg'];
        }
    header("Content-Type: image/jpeg"); 
    header("Content-Disposition: attachment; filename=".$file); 
    readfile($file);
    unlink($file);
    exit();
    
    }
    else
      die('Erreur');
    
    ?>
    Mais ce renvoi ue erreur, bon je vai lire la doc, mais en attendant si tu peut me dire ce qui ne va pas ?

  14. #14
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    J'ai ajouter les session start:
    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
    <?php
    
    
    if(isset($_FILES['photo']))
    { 
         $dossier = 'imgs/';
         $fichier = basename($_FILES['photo']['name']);
         if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
             session_start();
             $_SESSION['upload_fichier'] = $fichier;
              echo 'Upload effectué avec succès !<br>';
               exec("mogrify -resize 640x640 imgs/".$fichier);
                  echo ("<meta http-equiv='Refresh' content='2;URL=telecharg_suppr.php?jpg=imgs/$fichier'>");
    
    
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
               echo ("<meta http-equiv='Refresh' content='2;URL=index.php'>");
         }
    }
    
    
    ?>
    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
    <?PHP
    session_start();
    if ($_SESSION['upload_fichier'] == $_GET['file'])
    {
    if(!isset($_GET['jpg'])) 
        {
           header('location:erreur.php');
        }
    else
        {
           $file = $_GET['jpg'];
        }
    header("Content-Type: image/jpeg"); 
    header("Content-Disposition: attachment; filename=".$file); 
    readfile($file);
    unlink($file);
    exit();
    
    }
    else
      die('Erreur');
    
    ?>
    Maitenant j'ai cette erreur:
    Notice: Undefined index: file in
    z:\kookatix_interface\interface\kookatix_www\scripting\redimentionne image\telecharg_suppr.php on line 3

  15. #15
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    Regarde bien le code.
    J'ai mis $_GET['file'] pour l'exemple. C'est a toi de l'adapter en fonction de ton code
    De plus, il manque (probablement) les session_start();
    Tu dois les mettre au début de chaque fichier afin d'initialiser les sessions. Tout est expliqué dans la doc.

  16. #16
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    pour les ession start je vanai justement de les ajouter donc j'ai modifier ce qui est en rouge:
    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
    <?PHP
    session_start();
    if ($_SESSION['upload_fichier'] == $_GET['jpg'])
    {
    
    if(!isset($_GET['jpg'])) 
        {
           header('location:erreur.php');
        }
    else
        {
           $file = $_GET['jpg'];
        }
    header("Content-Type: image/jpeg"); 
    header("Content-Disposition: attachment; filename=".$file); 
    readfile($file);
    unlink($file);
    exit();
    
    }
    else
      die('Erreur');
    
    ?>
    mais le code renvoi tout le même "Erreur"

  17. #17
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    As tu rajouté les session_start dans les deux fichiers ?
    Fais un print_r($_SESSION['upload_fichier']); et print_r($_GET['jpg']);

    Mais sinon, tu as moyens de tout faire en une page (l'upload, le redimensionnement, le téléchargement, et la suppression).

  18. #18
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Citation Envoyé par leodi Voir le message
    As tu rajouté les session_start dans les deux fichiers ?
    Oui

    Citation Envoyé par leodi Voir le message
    Mais sinon, tu as moyens de tout faire en une page (l'upload, le redimensionnement, le téléchargement, et la suppression).
    Et il n'y aurai plus de problème de sécurité ?

  19. #19
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    ah j'ai trouver grace au print, il falait que je fasse comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['upload_fichier'] = "imgs/".$fichier;

  20. #20
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    Citation Envoyé par koKoTis Voir le message
    Et il n'y aurai plus de problème de sécurité ?
    Disons que le fait d'avoir des redirection, si l'utilisateur ferme son navigateur, l'image n'est pas supprimée, et il peut changer toutes les variables en GET.
    Le fait de tout avoir en une page est plus sécurisé, mais ca ne le rend pas entièrement fiable pour autant.
    A toi de t'amuser a modifier les variables en GET, uploader des fichiers exe, php ... pour tester la stabilité de ton script.

Discussions similaires

  1. Télécharger images pour boutons
    Par mehdiyou dans le forum VB.NET
    Réponses: 16
    Dernier message: 09/11/2010, 02h39
  2. Réponses: 33
    Dernier message: 12/03/2009, 17h37
  3. bouton "télécharger image"
    Par maze.alex dans le forum IHM
    Réponses: 4
    Dernier message: 04/11/2008, 16h37
  4. [MySQL] Télécharger images stockées dans mysql
    Par else_if dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/05/2008, 05h53
  5. Télécharger image vers poste client
    Par Thomad dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2006, 10h34

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