proc_open blocage du processus par php
Bonjour,
J'utilise un script avec proc_open() afin de lancer un programme automatique d'édition vidéo.
Je me suis inspiré texto du script du site php.net :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| $descriptorspec = array(
0 => array("pipe", "r"), // // stdin est un pipe où le processus va lire
1 => array("pipe", "w"), // stdout est un pipe où le processus va écrire
2 => array("file", "/tmp/error-output.txt", "a") // stderr est un fichier
);
$cwd = '/tmp';
$env = array('quelques_options' => 'aeiou');
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
// $pipes ressemble à :
// 0 => fichier accessible en écriture, connecté à l'entrée standard du processus fils
// 1 => fichier accessible en lecture, connecté à la sortie standard du processus fils
// Toute erreur sera ajoutée au fichier /tmp/error-output.txt
fwrite($pipes[0], '<?php print_r($_ENV); ?>');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
// Il est important que vous fermiez les pipes avant d'appeler
// proc_close afin d'éviter un verrouillage.
$return_value = proc_close($process);
echo "La commande a retourné $return_value\n";
} |
Visiblement l'interaction entre php et les programmes lancés dans des processus n'est pas très facile à maîtriser.
En effet la commande utilisée du type :
"monlogiciel.exe [args] etc ..." renvoie en temps normal une sortie texte mise à jour en temps réel du genre "progression x%" indiquant la progression du programme.
Or ceci visiblement pose problème à php puisque cette commande lancée par proc_open() finit par un blocage du script php au bout de 26 secondes obligeant à quitter ctrl+C. Ceci est bien lié au fonctionnement de php d'après mes tests puisque dans certains cas le processus arrive bien à son terme alors que le script php a été arrêté manuellement.
Quelqu'un aurait il une idée pour éviter un blocage de php avec proc_open dans ce cas ou même une explication ?