Bonjour à tous

je galère depuis quelques temps avec la récuperation puis l'affichage d'un champ de type image. En fonction des différentes méthodes testées, l'image s'affiche soit à moitié, soit pas du tout...

Résumé des épisodes précédents :

Avec une récupération classique, l'image n'est recuperée qu'à moitié.
Ce qui donne ($EMPLID étant une variable passée en paramètre.) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
...
$reqP = "SELECT * FROM PICTURE WHERE EMPLID = '".$EMPLID."'";	
$resP = odbc_exec($wh_lien_base, $reqP);	
while ($rowP=odbc_fetch_array($resP)) {
 $photo = $rowP["EMPLOYEE_PHOTO"];
}
header('Content-type: image/jpeg');
header('Content-transfer-encoding: binary');
print $photo;
Le champ image étant de grande taille pour stocker tout le code de l'image, je soupçonne qu'une partie du code n'est pas récupérée, ce qui expliquerait l'affichage "à moitié". La solution qui me semble la mieux adaptée est donc l'utilisation de PDO. Ce qui donne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
$db = new PDO("mondsn", "monuser", "monmdp");
$stmt = $db->prepare("SELECT EMPLID, EMPLOYEE_PHOTO FROM PICTURE WHERE EMPLID = '".$EMPLID."'");
$stmt->bindColumn(1, $eid, PDO::PARAM_STR, 256);
$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_BOUND);
header('Content-type: image/jpeg');
header('Content-transfer-encoding: binary');
$lob = pack('H*', $lob);//$lob ressort en hexa, nécessaire de le transformer avec pack
print $lob;
Avec cette solution, tout le code semble récupéré mais l'image ne s'affiche pas du tout. La transformation par la fonction pack() d'hexa en binaire pourrait être la cause de ce problème, mais je ne parviens pas à faire mieux. L'idée serait peut-être d'afficher l'image depuis le code hexa récupéré (sans passer par pack()) mais aucune solution testée ne fonctionne.

A noter que je ne peux montrer d'exemple d’exécution, le tout tournant sur un Intranet non public.
Je n'ai pas non plus le choix de stocker les images en tant que fichier (sinon j'aurai opté pour cette solution sans me prendre la tête !), la base SQL Server est fournie par un prestataire externe depuis un serveur secondaire.

Si quelqu'un a des pistes, je suis preneur !

Jack