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 :
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 php "mon_script.php" "ma_fonction" "mes_arguments"
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).
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;
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() :
lecture des données :
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"] ); .../...
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.
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);
Qu'est ce qui coince avec la fonction proc_open ? Merci d'avance.
Partager