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 :

fonction chargement d'images


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut fonction chargement d'images
    Bonjour,

    Je voudrais afficher des images sur une page web dans des étiquettes (comme l'on en voit sur des sites de rencontres souvent); ces images seraient piochées dans une base de données contenant les adresses des images stockées.

    J'ai fait un script mais ce dernier ne me satisfait pas car il est un peu compliqué a comprendre.

    J'ai lu sur un bouquin que l'on pouvait afficher une image sur une page HTML via une fonction qui serait chargée a chaque fois d'afficher une image. le code ressemblerait a ceci dans la page HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="../php/affiche_image.php">
    le fichier "affiche_image.php" retournerait donc une image?

    Quelqu'un peut il m'aider? si vous connaissez d'autres techniques n'hésitez pas a me proposer.

    merci a vous.


  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux tout à fait faire comme ça.

    Ton fichier "affiche_image.php" a simplement à faire
    1 - Requête sur la base pour déterminer le fichier
    2 - Définition des en-tête d'une image avec header()
    3 - Ecriture du contenu avec readfile()

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut header?
    je ne comprend pas ce point la:

    2 - Définition des en-tête d'une image avec header()

    ce n'est pas l'entete de l'image mais de la page qui contiendra l'image que je dois definir non?

    Sinon ou trouver comment programmer les entetes car j'ai trouvé ceci sur php.net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Content-type: application/zip;\n"); //or yours?
    header("Content-Transfer-Encoding: binary");
    $len = filesize($filename);
    header("Content-Length: $len;\n");
    $outname="downfile.zip";
    header("Content-Disposition: attachment; filename=\"$outname\";\n\n");
     
    readfile($filename);
    ?>
    j'aimerai pouvoir dechiffrer ce protocole HTTP.
    merci

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    non c'est bien l'entête de type de données que le navigateur doit interpréter, donc dans ce cas, une image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header('Content-type: image/png');
    header('Content-type: image/gif');
    //etc.
    Par contre, qu'est-ce que tu veux dire par étiquette ? car il y a peut-être plus simple et plus pratique. Par exemple, s'il s'agit de pseudo pop-up ou du style, il vaut sans doute mieux tout charger avant et afficher/cacher via CSS.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut Entete pour une image dans une page html?
    En fait j'appelle étiquette une photo miniature d'un membre d'un site (comme cela se fait sur les sites de rencontre) affiché dans une galerie de photos miniatures dans une page web .

    Donc en fait si je veux afficher 10 photos miniatures sur une page web contenant du texte, je dois définir pour chaque petite image l'entete?ca me semble pas cohérent.

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Pourtant je crois qu'il n'y a pas d'autre solution mais de toute façon tu utilises le même fichier php et tu passes l'id du user donc ça n'a pas d'importance au final tu as quelque chose de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <img src="affiche.php?id=1">
    <img src="affiche.php?id=2">
    et ton fichier affiche.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    if(isset($_GET['id'])) {
     
    $sql = "SELECT raw_data FROM table WHERE id=".mysql_real_escape_string($_GET['id']);
     
    $res = mysql_query($sql);
    $row = mysql_fetch_assoc($res);
    header('Content-type: image/gif');
    echo $row['rawData'];
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut donc...
    si je comprend bien tu vas directement chercher l'image dans la base de données dans un champs de type BLOB, puis tu indiques que ce que tu envois sur la page c'est une image de type gif que tu affiches avec la fonction echo?

    echo peut afficher des images?

    merci


  8. #8
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Oui c'est bien ça.
    Oui, en fait pour être plus juste, echo() n'affiche pas des données mais elle envoie des données au navigateur. Ensuite, le navigateur les interprète en fonction des entêtes. Dans un vrai fichier image il y a aussi un header qui est suivi des données brutes.

    (si t'es en Blob, il y a peut-être une manip supplémentaire pour convertir le contenu binaire mais je ne m'en souviens plus)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut ok merci.... j'essaye ca...
    merci!


  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut toujours ce probleme ...
    Je n'arrive toujours pas afficher des images en partant d'une page 'inscription' qui appelle un script en php (pour afficher l'image comme décrit plus haut).

    lorsque je charge une image du formulaire et que j'appelle le fichier affiche.php pour l'afficher, cette image ne s'affiche pas.

    j'ai fait un test sur la superglobales $_FILES comme ceci:

    dans mon fichier inscription j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <td align="middle" width="200px" height="200px">
    <img src="../../php/affiche.php" alt="photo principale" />
    </td>
    <td align="right">:
    <form method="post" action="inscription.php" enctype="multipart/form-data">
    <input type="file" size="10" name="picp" style="display:block; margin-top:70px;"/> 
    <input type="submit" value="Charger une photo" style="display:block; margin-top:20px;"/>
    </form>
    </td>
    (ceci est une partie du code seulement)

    dans mon fichier affiche.php j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_FILES['picp']['size'])){
    header('Content-Type: image/jpeg');
    $img = imagecreatefromjpeg("../photos_temp/thumbnail.jpg");
    imagejpeg($img);
    }
    Lorsque sur la page du formulaire je telecharge une photo et que la page 'inscription' se réaffiche, je teste la variable $_FILES['picp']['size'] celle ci a une valeur.

    Par contre le fichier affiche.php ne renvoi aucune photo , comme si $_FILES['picp']['size'] n'existait pas.

    Comment ca se fait?

    Je ne suis pas sur de m'être bien fait comprendre.

    merci.


  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut personne ne trouves?
    Auriez vous un exemple de script de ce type pour m'aidez si vous ne pouvez pas répondre SVP


    Merci.

  12. #12
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    là t'as mélangé 2 techniques.
    Dans ton fichier affiche.php, $_FILES['picp']['size'] n'existe pas car quand tu fais : <img src="../../php/affiche.php" alt="photo principale" />
    il s'agit d'une nouvelle requête HTTP.
    Au final, que veux-tu faire afficher une image depuis une BDD ou bien créer un thumbail dans un fichier ?

    Apparemment tu veux gérer un thumbail temporaire mais en le nommant comme ça, si plusieurs clients s'inscrivent en même temps rien ne garantie que l'un ne voit pas l'image de l'autre. Si au final, ton thumbail te resservira, pourquoi tu le sauves pas directement sur le serveur, en le nommant avec l'id du client par exemple ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut merci de la reponse.
    Je ne savais pas que <img src="../../php/affiche.php" alt="photo principale" /> etait une requete Http et donc que $_FILES['picp']['size'] n'etait pas accessible.

    Ce que je veux faire c'est une page d'inscription dans laquelle le nouveau membre sélectionne une photo, il la voit s'afficher, si elle lui plait, il l'a garde et continu l'inscription, sinon il la change, mais tant que l'inscription n'est pas validée entièrement je ne veux pas inscrire la photo dans une base de données ou sous forme d'un fichier.

    merci


  14. #14
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    En fait, non je dis nimp, ça ne doit pas créer de nouvelle requête ^^ mais dans tous les cas ça appelle le script affiche.php dans un contexte où $_FILES n'existe pas.
    Dans ton cas, il faudrait créer le thumb depuis la variable $_FILES['userfile']['tmp_name'] à l'inscription (donc dans inscription.php) mais ça me paraît un peu compliqué pour l'afficher ensuite (quoique tu pourrais peut-être passer $_FILES['userfile']['tmp_name'] à affiche.php).

    Pour infos $_FILES['userfile']['tmp_name'] te donne le chemin du fichier temporaire créé quand t'upload un fichier.

    Le plus simple serait de la mettre directement dans la BDD ou la stocker en fichier et de la modifier ensuite. Au final, tu sauves que le thumb et/ou l'image aux dimensions d'origine ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut ca me paraissait
    ca me paraissait pourtant simple d'afficher une image, apparemment ca ne l'est pas tant que ca.

    SI $_FILES['userfile']['size'] ne passe pas

    pourquoi $_FILES['userfile']['tmp_name'] passerait il?

  16. #16
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    En fait, ce qui est un peu compliqué c'est de créer une image à la volée avec GD, de l'afficher directement sur la même page et sans la sauvegarder physiquement.

    Pour le $_FILES['userfile']['tmp_name'], je disais de le "passer" à affiche.php du type : echo '<img src="affiche.php?path='.$_FILES['userfile']['tmp_name'].'"'>


    et dans affiche.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($_GET['path']){
    header('Content-Type: image/jpeg');
    $img = imagecreatefromjpeg($_GET['path']);
    imagejpeg($img);
    }
    A priori, ca devrait marcher.

    Une autre solution consisterait à créer ton thumb dans le répertoire temporaire du serveur et de l'afficher avec un lien direct. Je crois que le rep temporaire se vide automatiquement donc normalement le thumb temporaire devrait être effacé tout seul. Mais ça pose un autre problème qui est que tu pourrais pas y accéder directement via un <img src"lien_en_dur"> car le rep temporaire est hors ligne (non publié). Il faudrait donc aussi un script php pour lire et renvoyer l'image au navigateur, car php, lui, a les droits pour lire dans ce rep.

    Bref le plus simple reste de sauver directement ton thumb dans un fichier ou dans une BDD et de le modifier ensuite si le user veut le changer, car a priori ce sera un cas d'utilisation assez rare.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut ok
    Merci je vais essayer ce que tu m'a dis.

    En fait je ne voulais pas ecrire le fichier de l'image sur le serveur car si un nombre conséquent d'utilisateurs ne terminent pas leurs inscription je pourrait me retrouver avec des fichiers photo orphelins... sans users existant.

    a+

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux stocker les images en session.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut c'est a dire?
    En session? sous une variable en session du style $_SESSION['monimage']?

    Si tel est le cas je pensais que $_FILES etait en quelque sorte "en session" dans la mesure ou il est accessible partout non?

    Merci

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut données en session
    Au fait!

    Comment on fait pour mettre les données en session?


Discussions similaires

  1. thumbnail et chargement d'image
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/01/2006, 13h27
  2. [xhtml][css] chargement d'image sur IE
    Par killgors dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 23/08/2005, 20h37
  3. chargement d'image
    Par bakonu dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/06/2005, 22h40
  4. [JLabel] Chargement d'image dans une JFrame
    Par mr.t dans le forum Composants
    Réponses: 10
    Dernier message: 27/01/2005, 18h32
  5. Réponses: 21
    Dernier message: 29/04/2004, 15h45

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