Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut tout le monde,
Je cherche depuis quelque temps comment je peux retourner le contenu d'une image via une action :
Ma page HTML :
<img src="user/loadavatar" />
Mon action :
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 :
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
voici comment je fais avec une png
controller
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
<?= 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)
Hors ligne
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 :
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
<?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
J'ai également bêtement essayé dans une page test.php :
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
Ca fonctionne dans un bête page php sans passer par une action mais impossible via une action du controller....
Help........
Hors ligne
tu l’appelles comment ? dans ma méthode, il faut appelé l'url avec /format/png
Hors ligne
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
readfile affiche le contenu d'un fichier
http://www.php.net/manual/fr/function.readfile.php
Hors ligne
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 :
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
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 :
celui généré : 0D 0A 47 49 ....... le bon fichier : 47 49 .......
dernière ligne :
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
Hello,
Un retour chariot en fin de fichier => ne fermes pas les balises php (ie pas de ?>)
@+
Hors ligne
@mikaelkael
j'y ai pensé mais toujours le même problème....
Hors ligne
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
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
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