2014-06-24 1 views
0

Je tente actuellement d'écrire un service Web qui génère un code QR pour une chaîne donnée. J'utilise PHP QR Code (http://phpqrcode.sourceforge.net/) pour générer le code QR, comme ceci:Capture du flux PNG avec le tampon de sortie PHP

QRcode::png('PHP QR Code :)'); 

Résultat: un flux PNG du code QR est affiché à l'écran. Comme il s'agit d'une fonction vide qui est directement transmise au navigateur, cela empêche le renvoi correct de l'image.

Je voudrais capturer le flux PNG avec le tampon de sortie de PHP et demander à mon service web de retourner cette image capturée. J'ai mis en place le code de test suivant sur une page php simple à des fins de test:

include('/vendor/phpqrcode/qrlib.php'); 

$scancode = "testcode"; 

ob_implicit_flush(false); //just in case 
ob_start(); 
QRcode::png($scancode); 
$output = ob_get_contents(); 
ob_end_clean(); 
echo "--" . $output . "--"; 
die(); 

Cependant, quand je lance le code tampon ne fonctionne pas comme je l'avais prévu. Peu importe ce que je fais, une image cassée est toujours affichée dès que j'appelle la fonction. Lorsque je supprime le code de tampon de sortie, le code QR est affiché sur l'écran.

Pourquoi certaines de mes sorties ne sont-elles pas capturées?

Edit: concernant: phpqrcode library return image as a string

Répondre

1

Retirer tête ("content-type: image/png");

pour le faire fonctionner avec la mise en mémoire tampon de sortie.

Plus tard, vous pouvez l'écho

tête ("content-type: image/png"); et votre sortie capturée pour afficher l'image

+0

Merci beaucoup pour la réponse, cela a du sens. Comment ferais-je cela dans le contexte de mon code ci-dessus? J'ai essayé d'ajouter header_remove ("content-type: image/png") mais en vain. Je dois dire que je ne sais pas à 100% comment exactement tout cela fonctionne en arrière-plan. Je suppose que je devrais modifier la fonction qui génère l'image et essayer de dépouiller l'en-tête là-bas? – Jort