Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-06-2010 10:17:32

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Retourner une image via une action

Salut tout le monde,

Je cherche depuis quelque temps comment je peux retourner le contenu d'une image via une action :

Ma page HTML :

Code:

<img src="user/loadavatar" />

Mon action :

Code:

function loadavatarAction()
{
      $this->_helper->layout->disableLayout();
      $this->_helper->removeHelper('viewRenderer');

      $logo = file_get_contents("http://localhost/no_image.gif");
    
      $this->getResponse()->clearBody ();
      $this->getResponse()->setHeader('Content-Type', 'image/gif');
      $this->getResponse()->setBody($logo);            
}

L'action est bien appelé et la réponse est :

Code:

HTTP/1.1 200 OK
Date: Fri, 25 Jun 2010 08:07:06 GMT
Server: Apache/2.2.11 (Win32) PHP/5.3.0
X-Powered-By: PHP/5.3.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 2691
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: image/gif

Mais l'image ne s'affiche pas :s,

Help ! ^^

Jo

Hors ligne

 

#2 25-06-2010 10:32:39

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Retourner une image via une action

voici comment je fais avec une png

controller

Code:

 public function init() {
 $contextSwitch = $this->_helper->getHelper('contextSwitch');
 $contextSwitch->addContext('png', array(
                                     'suffix' => 'png',
                                     'headers' => array('Content-Type' => 'image/png'),
                                 ))
                                 ->addActionContext('image', 'png')
                                 ->initContext();
  }

  public function imageAction() {
    $this->image = xxx; // le code de ton image (filte_get_contents pour toi)
  }

image.png.phtml

Code:

<?= echo $this->image;

L'interet du context, c'est que je peux ne pas utiliser le context png et ainsi utilisé le context par défaut (html disons) pour afficher une sorte de debug sur la façon a été réaliser l'image (bon, c'est vrai, pour toi, y' pas grand interet à voir ton code)

Dernière modification par nORKy (25-06-2010 10:34:34)


----
Gruiiik !

Hors ligne

 

#3 25-06-2010 11:52:40

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Re: Retourner une image via une action

Yop,

Merci pour ta réponse rapide.

Je débute avec Zend et je ne connais pas cet helper alors j'ai essayer de créer un controller pour tester mais j'arrive pas à voir l'image :

Code:

class ImageController extends Zend_Controller_Action 
{
    function init()
    {
         $contextSwitch = $this->_helper->getHelper('contextSwitch');
         $contextSwitch->addContext('gif', array(
                                   'suffix' => 'gif',
                                   'headers' => array('Content-Type' => 'image/gif'),))
                       ->addActionContext('image', 'gif')
                       ->initContext();
    }
 
    function imageAction()
    {
        $this->_helper->layout->disableLayout();
            $this->image = file_get_contents("http://localhost/skybook/public/images/no_image.gif"); 
    }
}

image.phtml

Code:

<?php echo $this->image; ?>

Si je met le file content dans $this->view->image il m'affiche le content dans la page html sous forme de caractère bizard^^...

Mon objectif :
- J'ai un UserController contenant plusieurs action pour afficher des vues ou bien renvoyer des données Json demandée par requêtes ajax
- Dans ce controller j'ai une action loadavatarAction qui charge le content d'une image d'un champ blob et je voudrais pouvoir afficher cet image dans ma page.
Mais cet action n'est pas lié à une vue, il faudrait chargé l'image par une requête séparé car l'image peut changer et je ne veut pas recharger toute ma page, je voudrais juste recharger mon image lorsque je la rafraichis (je travail avec extjs)

Voilà je voudrais au moins faire marcher ton exemple, qu'ai-je oublié ?

D'avance merci,

Jo

Hors ligne

 

#4 25-06-2010 14:59:30

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Re: Retourner une image via une action

J'ai également bêtement essayé dans une page test.php :

Code:

header("Content-Type: image/png");
echo file_get_contents('test.png');

Mais j'ai une erreur : L'image “test.php” ne peut être affichée car elle contient des erreurs !!!
L'image est bien là, j'ai bien un contenu mais j'ai lu qu'on pouvais avoir cette erreur si autre chose était envoyé avant le header (espace ou autre), le bootstrap pourrait m'embêter à ce niveau ?

Dernière modification par joatack (25-06-2010 15:00:21)

Hors ligne

 

#5 28-06-2010 09:04:39

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Re: Retourner une image via une action

Ca fonctionne dans un bête page php sans passer par une action mais impossible via une action du controller....

Help........

Hors ligne

 

#6 28-06-2010 10:41:47

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Retourner une image via une action

tu l’appelles comment ? dans ma méthode, il faut appelé l'url avec /format/png


----
Gruiiik !

Hors ligne

 

#7 28-06-2010 16:41:54

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Re: Retourner une image via une action

nORKy a écrit:

tu l’appelles comment ? dans ma méthode, il faut appelé l'url avec /format/png

Je l'appel avec image/image (Le controller est bien appelé mais page blanche)....j'ai essayé en mettant image/png mais erreur car il ne connait pas l'action....

Ton controller s'appel format (?) mais tu n'a pas d'action "png" mais "image"....comment se fait-il que tu puisse l'appeler de cette manière ?

(je ne connais pas ce contextSwitch)

Hors ligne

 

#8 28-06-2010 18:13:20

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Retourner une image via une action

readfile  affiche le contenu d'un fichier
http://www.php.net/manual/fr/function.readfile.php

Hors ligne

 

#9 29-06-2010 09:22:33

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Re: Retourner une image via une action

sekaijin a écrit:

readfile  affiche le contenu d'un fichier
http://www.php.net/manual/fr/function.readfile.php

Même problème avec readfile -> L'image “http://localhost/skybook/image/image” ne peut être affichée car elle contient des erreurs.

Je pense que mon problème doit se situer autre part....est-il possible que mon bootstraap puisse être la cause ? qu'il rajoute qqch dans le content de mon image ?

Avec ce code j' n'ai pas d'erreur mais toujours pas d'image, maintenant FF renvoi l'url de l'image et ie me renvoi le content sous forme de caractère bizard :

Code:

class ImageController extends Zend_Controller_Action 
{
 
    function imageAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        
        $image = file_get_contents("test.jpg");
          
        $this->getResponse()->clearBody ();
        $this->getResponse()->clearAllHeaders();
        $this->getResponse()->setHeader('Content-Type', 'image/jpg',true);
        $this->getResponse()->setHeader('Cache-Control', 'public');
        $this->getResponse()->setBody($image); 

    }
}

Mais toujours pas d'image, pourquoi ca marche dans un bête fichier php mais pas via une action.....

Dernière modification par joatack (29-06-2010 11:34:25)

Hors ligne

 

#10 29-06-2010 15:40:31

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Re: Retourner une image via une action

A l'aide du soft Beyond compare, j'ai fait une comparaison des 2 fichiers images en hexa (l'original et celui généré) et 2 différences :
1er ligne :

Code:

celui généré : 0D 0A 47 49 .......
le bon fichier  :        47 49 .......

dernière ligne :

Code:

celui généré : ..... 35 20
le bon fichier  : ....... 35 20 00 3B

Une partie à donc été rajouté au début et une partie a été retiré à la fin qui fait que le fichier n'est pas valide sinon tout est exactement pareil.....à quoi cela peut-il correspondre ?

J'ai changer le code hexa du fichier généré et maintenant je peux l'ouvrir  !!!! pourquoi le content est-il changé quand on passe par une action.....

Hors ligne

 

#11 29-06-2010 15:49:19

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Retourner une image via une action

Hello,

Un retour chariot en fin de fichier => ne fermes pas les balises php (ie pas de ?>)

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#12 29-06-2010 16:02:25

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Re: Retourner une image via une action

@mikaelkael

j'y ai pensé mais toujours le même problème....

Hors ligne

 

#13 29-06-2010 18:22:52

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Retourner une image via une action

Un saut de ligne en début de fichier, j'ai eu le problème j'avais un saut de ligne avant ma balise "<?php" dans mon fichier de bootstrap j'ai perdu des jours (voir des semaines la dessus)

Hors ligne

 

#14 29-06-2010 18:40:37

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Retourner une image via une action

il ne faut aucun saut de ligne avant <?php
et aucun ?>
dans TOUS les fichiers php
ceux de ZF sont OK (testés et re-testés)
reste les tiens
Index.php
Bootstrap
diverse classes utilisé par l'action
le contrôleur
etc.

A+JYT

Hors ligne

 

#15 30-06-2010 08:50:45

joatack
Membre
Date d'inscription: 16-06-2010
Messages: 11

Re: Retourner une image via une action

Résolu........c'était bien cette bêtise, je n'utilisais déjà pas les "end tag" mais je n'avais pas enlevé des lignes vides dans le bootstraap, index & helpers.......Ca marche maintenant.....

Merci pour votre aide !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages