Vous n'êtes pas identifié(e).
Pages : 1
résolu !
Dernière modification par totolosc1 (07/05/2012 16:29:14)
Hors ligne
A première vu ça me semble correct, mais je ne suis pas expert en pg/php.
Avez-vous vérifié qu'il y a bien des données dans le champs picture ?
Sinon vous pouvez également enlever le header() dans le fichier image.php et essayer de l'appeler avec un paramètre en dur (le $_GET['id'] ) voir si les données s'affichent bien sur la page, ou guetter d'éventuelles erreurs dans les fichiers logs.
Julien.
https://rjuju.github.io/
Hors ligne
Merci pour votre réponse rjuju.
Oui j'ai vérifié pour le champ picture, tout est correct au niveau des données c'est pour ça que je ne comprends vraiment pas.
J'ai également essayé de l'appeler sans le header(), et il y a bien ma ligne d'octets qui apparaît..
Hors ligne
Peut-être manque-t-il d'autres headers ?
Par exemple header('Content-transfer-encoding: binary');
Ou alors vérifiez qu'il n'y a aucun affichage avant le header (ne serait-ce qu'un retour chariot).
Julien.
https://rjuju.github.io/
Hors ligne
Je viens d'essayer avec le header('Content-transfer-encoding: binary'); mais ça ne change rien.
Comment puis-je faire pour vérifier qu'il n'y ait aucun affichage avant le header ? Car quand je charge ma page et que je souhaite afficher le code source, c'est impossible, certainement parce qu'il prend bien en compte que c'est une image..
Hors ligne
Vous pouvez soit utiliser une extension de votre navigateur qui vous l'affichera (je ne sais pas trop faire cette méthode), soit la méthode «de sauvage», à savoir faire un dump de ce qui passe sur le réseau. wireshark fait ça très bien, par exemple.
Marc.
Hors ligne
Merci Marc Cousin, je vais me renseigner sur cette méthode avec wireshark alors.
edit : j'ai vérifié, le header est bien pris en compte comme il faut
Dernière modification par totolosc1 (04/05/2012 13:00:09)
Hors ligne
je me suis aperçu que le résultat que j'envoie dans la base de donnée, est différent de celui que je récupère, je m'explique :
le début de ce que j'envoie dans la base de donnée (dans la colonne picture de type bytea) ressemble à ceci :
\211PNG\015\012\032\012\000\000\000\015IHDR\000\000\001\000\000\000\001\000\010\006\000\000\000\\
or quand je récupère ce résultat sans le reconvertir avec pg_unescape_bytea (donc le résultat doit être identique au précèdent), j'obtiens ceci :
\x89504e470d0a1a0a0000000d49484452000001000000010008060000005c72a8
ce n'est pas logique si ?
Hors ligne
Cela doit être lié à la gestion des types binaires :
http://docs.postgresqlfr.org/9.1/datatype-binary.html
Vous pouvez regarder du coté du paramètre bytea_output, ou de la fonction encode() selon le format que vous utilisez.
Julien.
https://rjuju.github.io/
Hors ligne
merci rjuju !!
ça fonctionne maintenant ! Il fallait bel et bien que je définisse le format de bytea_output.
Merci encore !
Hors ligne
Hors ligne
c'est nouveau d'effacer la question quand la réponse a été donné ?
Hors ligne
Effectivement pas très cool.
De mémoire la question était sur un script php de type image.php?id=num
Le script faisait un select sur un champ bytea d'une table postgres où étaient stockées les images avec les fonctions classiques php :
header('Content-transfer-encoding: binary');
$conn = pg_pconnect(...);
$result = pg_query($conn, "SELECT image from table where id = ".$_GET['id']);
$row = pg_fetch_array($result);
print($row[0]);
pg_close($conn);
(le code ici est un exemple non testé)
et l'image n'était au final pas affichée.
Changer le paramètre bytea_output entre 'hex' et 'escape' a résolu le problème.
Dernière modification par rjuju (08/06/2012 11:33:44)
Julien.
https://rjuju.github.io/
Hors ligne
Au passage, pour php, je ne sais pas, pour java, le mieux, quand c'est possible, c'est de mettre à jour le driver jdbc, pour qu'il comprenne le format hex (il est plus performant).
Marc.
Hors ligne
Pages : 1