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 :

Problème d'affichage d'image avec imagepng


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Problème d'affichage d'image avec imagepng
    Bonjour,

    je me permets de vous soumettre mon problème car après 2 jours je ne vois plus aucune solution, et les différents forums que j'ai visité ne m'ont pas éclairé.
    Je veux afficher une image avec imagepng() dans une balise html type <img src="image.php" alt""/>.

    J'ai donc créé mon fichier image.php qui contient trois fonctions, et mon fichier html qui affiche l'image. Tout fonctionne tant que j'affecte mes variables directement dans mon fichier image.php Par contre dès que je me sers du tableau $_ENV[] (variable d'environnement), mon programme ne fonctionne plus. Il affiche des caractères bizarres comme s'il ne savait pas interpréter l'image.

    J'ai pourtant comparé mes variables avec var_dump(), ce sont les mêmes types et les mêmes valeurs (!). Le code qui marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fichier="piscine.jpg";
    $legende="Le texte de la legende";
    $tritrelegende="Titre de la legende";
    Le code qui ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $_ENV['$f']="piscine.jpg";
    $_ENV['$d']="Le texte de la legende";
    $_ENV['$t']="Titre de la legende";
     
    $fichier=$_ENV['$f'];
    $legende=$_ENV['$d'];
    $tritrelegende=$_ENV['$t'];
    Je précise que le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ($_ENV['$f']==="piscine.jpg"){
    echo 'C''EST PAREIL !'
    }
    affiche C'EST PAREIL !

    En gros ça marche avec une constante mais pas avec une variable globale qui a pourtant la même valeur que la constante (et qui est du type attendu).

    Au secours !!!

  2. #2
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    salut,

    d'abord je vois pas pourquoi tu utilises $_ENV, tu ferais mieux d'utiliser $_GLOBALS ou le mot clé global. Sinon as tu penser à faire des echo ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Salut,

    j'ai essayé avec $_GLOBALS mais ça plante toujours. J'ai fait des echo et des var_dump un peu partout dans mes fonctions mais tout est ok, à mon grand désespoir.

    En fait, ce que je veux faire c'est déclarer et affecter des variables dans un fichier php et les utiliser dans un autre, je crois que c'est la transmission des variables qui pose problème.

    J'ai déclaré dans affiche.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    	$_GLOBALS['$f']="piscine.jpg";
    ?>
     
     
    <div>	<img alt=""  src="slider.php" /></div>
    Et je voudrais utiliser $_GLOBALS['$f'] dans slider.php comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    image_post($_GLOBALS['$f'] );
    Je me rend compte que j'espérais que le saint esprit transmette ma variable...
    Mais alors comment faire pour passer une variable à un autre fichier sans formulaire, et appeler une fonction de ce fichier qui crée une image avec la variable qui va bien?

    EDIT:

    Il faudrait que je puisse inclure le fichier qui contient ma fonction d'affichage, et appeler cette fonction directement dans mon code html comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img alt"" src=" <? image_post($_GLOBALS['$f'] ); ?>" />
    Malheureusement ça ne marche pas. Est-il possible de le faire?

  4. #4
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Il faudrait que je puisse inclure le fichier qui contient ma fonction d'affichage, et appeler cette fonction directement dans mon code html comme ceci:
    Très bonne idée, dans ce cas tu passeras juste le nom de l'image en paramètre et tu n'auras plus besoin des superglobales.

    ça auras à peu près cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    include 'slider.php';
    ?>
     
    <img alt"" src="<?php image_post( 'piscine.jpg' ); ?>" />

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour tes conseils.

    Ça ne fonctionne toujours pas, mais je ne dois pas être loin. en utilisant ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php	
    		$f="piscine.jpg";
    		include 'slider.php';
    ?>
     
     
    <li><img alt="new Mikado logo 600 3D"  src="<?php image_post($f);
    ?>" />
    j'obtiens bien une image, mais c'est celle de l'attribut alt (!).

    En utilisant ce code dans affiche.php:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php	
    		$f="piscine.jpg";		
             	include 'slider.php';
                    image_post($f);
    ?>
    Et en ajoutant des echo et en enlevant le imagepng() de ma fonction image_post() dans slider.php, j'obtiens bien la string "piscine.jpg"

    J'ai bien mis header("Content-type: image/png"); au début de ma fonction image_post (sans ça j'ai des milliers de caractères qui s'affichent). Je ne vois vraiment pas ce qui manque...

    EDIT: en fait j'obtiens le texte suivant sous forme d'image:

    L'image "http://localhost/... ne peut être affichée car elle contient des erreurs.

    Je n'ai pas l'impression que ce que j'essaie de faire soit compliqué, mais là j'avoue ne plus rien comprendre.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Après une nuit de tests, j'arrive à cette conclusion:

    Quand j'ai deux fichiers, img.php qui contient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
     
    function img (){
    		header("Content-type: image/png");
    		$image_finale= imagecreatetruecolor(550,400);
    		imagepng($image_finale);
    		}
     
    		img();
    ?>
    Et affiche.html qui contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img alt=""  src="img.php" />
    J'obtiens une image.
    Par contre quand j'ai un seul fichier affiche.php qui contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
     
    function img (){
    		header("Content-type: image/png");
    		$image_finale= imagecreatetruecolor(550,400);
    		imagepng($image_finale);
    		}
     
    ?>
     
     <img alt=""  src="<?php img(); ?>" />
    J'obtiens cette image:

    L'image http://localhost/... ne peut être affichée car elle contient des erreurs.

    Si quelqu'un peut m'expliquer pourquoi, ça m'enlèverais une belle épine du pied. Merci!

  7. #7
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    J'obtiens cette image:L'image http://localhost/... ne peut être affichée car elle contient des erreurs.
    c'est normal, et c'est à cause des en-têtes envoyées au navigateur. Il doit y avoir un conflit.

    je te propose de passer ta valeur par la méthode GET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    function img ( $texte ){
    		header("Content-type: image/png");
    		$image_finale= imagecreatetruecolor(550,400);
    		imagepng($image_finale);
    		}
    $letexte = $_GET['texte']
    		img( $letexte );
    ?>
    et dans l'autre fichier d'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img alt=""  src="img.php?texte=piscine.jpg" />

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup, ça fonctionne parfaitement! En fait la transmission de variables dans $_GLOBALS[] ou dans $_GET[] ne pose pas de problème, c'est bien un conflit dans le header de la page html qui faisait planter ma page. La fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-type: image/png");
    ne doit pas se trouver dans la page php ou html qui affiche (sauf s'il n'y a que de l'image png), mais dans la page php qui crée l'image. De cette façon, je peux utiliser mon fichier php comme src puisqu'il renvoie bien un header image/png:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img alt=""  src="img.php" />
    Le header de la page qui affiche reste inchangé, pas de conflit, ça fonctionne.

    Merci encore!

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

Discussions similaires

  1. [HTML 4.0] Problème d'affichage d'images avec IE
    Par Kropernic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 21/12/2011, 09h55
  2. Problème d'affichage d'image avec PyQt
    Par mome86 dans le forum PyQt
    Réponses: 1
    Dernier message: 25/07/2009, 12h03
  3. Problème d'affichage d'images avec EasyPHP
    Par geros dans le forum Apache
    Réponses: 3
    Dernier message: 06/11/2008, 15h14
  4. problème d'affichage d'image avec mozilla
    Par lyon31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/03/2006, 16h27

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