Récupérer les données sortantes avec proc_open
Bonjour,
J'ai créé un script php que j'exécute en ligne de commande me permettant d'avoir en sortie stdout des données binaires (image) :
Commande :
Code:
php "mon_script.php" "ma_fonction" "mes_arguments"
Dans mon programme j'ai testé cette ligne de commande avec les lignes de code :
Code:
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:
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:
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.