Bonjour,
J'ai créé un script que j'exécute en ligne de commande me permettant d'avoir en sortie stdout des données binaires (image) :
Commande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
php "mon_script.php" "ma_fonction" "mes_arguments"
Dans mon programme j'ai testé cette ligne de commande avec les lignes de code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
$commande="php \"mon_script.php\" \"ma_fonction\" \"mes_arguments\";
exec($commande,$retour,$statut);
echo $retour;
lorsque j'exécute en ligne de commande ou via le navigateur internet ces lignes de codes j'ai bien la variable $retour qui contient les données binaires (image).

Par nécessité pratique, plutôt que d'utiliser exec(), j'utilise la fonction proc_open() en passant en paramètre la ligne de commande $commande. Cette méthode déjà utilisée sur d'autres lignes de commande ne retournant pas de données binaires fonctionne bien, mais dans le cas d'une commande retournant des données binaires (image) la fonction proc_open s'exécute mais le processus semble bloqué et aucune donnée n'est retourné par l'appel de stream_get_contents() :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
proc_open($commande, $processus_tab[$index_processus]["liste_flux_entree_sortie"], $processus_tab[$index_processus]["ressources_flux"], $processus_tab[$index_processus]["dossier_entree"],$processus_tab[$index_processus]["variables_environnement"], $processus_tab[$index_processus]["options"] );
.../...
lecture des données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
		        $r = NULL;
		        $w = array($processus_tab[$index_processus]["ressources_flux"][$option_tab["index_flux_sortie"]]); //flux de sortie du processus stdout
		        $e = NULL;
		        $c = stream_select($r, $w, $e, 0); 
		    if($c!=0 && !$c){
 
 
				foreach ($w as $stdout) {
					$donnees=stream_get_contents($processus_tab[$index_processus]["ressources_flux"][$option_tab["index_flux_sortie"]]),"UTF-8","CP850");
}
.../...
$statut_tab=proc_get_status($pocessus_en_question);
La lecture de $statut_tab retourne le status "running=true" et la processus reste comme cela indéfiniment sans rien retourner alors que exec() retourne bien les données.

Qu'est ce qui coince avec la fonction proc_open ? Merci d'avance.