Je voudrais que la sortie d'un processus créé avec proc_open soit redirigée vers un autre créé avec proc_open (en php). Par exemple. En bash je peux faire:Connectez les tuyaux des processus en php
[[email protected] ~]$ cat foo
2
3
1
[[email protected] ~]$ cat foo | sort
1
2
3
[[email protected] ~]$
Je voudrais simuler cela en php avec la fonction proc_open (au lieu de shell_exec) afin d'avoir le contrôle de retour des codes, des tuyaux, etc. Je veux quelque chose comme ceci:
$catPipes=array();
$sortPipes=array();
$cwd = '/tmp';
$env = array();
$catProcess = proc_open("cat foo", array(
0 => array("pipe", "r"),
1 => array("pipe", "w")
), $catPipes, $cwd, $env);
$sortProcess = proc_open("sort", array(
0 => array("pipe", "r", $catPipes[1]),
1 => array("pipe", "w"),
), $sortPipes, $cwd, $env);
echo stream_get_contents($sortPipes[1]);
fclose($sortPipes[1]);
//proc_close(this) ... proc_close(that) ... etc
Est-ce que quelqu'un pourrait savoir comment je peux simuler le "|" de bash en php, c'est-à-dire relier le second descripteur du cat-process au premier descripteur du processus de tri? Toute aide serait appréciée! Mais s'il vous plaît ne me redirigez pas vers shell_exec, car je veux être en mesure de vérifier les codes de sortie et les erreurs de journalisation :).
EDIT:
Mes besoins au travail-business solution est BTW:
while(!feof($searchPipes[1])) fwrite($lookupPipes[0], stream_get_line($searchPipes[1], 40000));
Ce qui est essentiellement ce que le système d'exploitation ferait, mais je ne veux pas mon propre pipe gestion , comme j'ai un noyau/posix pour cela, et soyons honnêtes, ce n'est pas 1976 :)
Je suis désolé de ne pas avoir remarqué votre réponse :) Je l'ai déjà corrigé avec un hack, mais aujourd'hui j'ai vérifié votre code, et cela fonctionne et est opérationnel en ce moment même! Merci beaucoup! :) – Herbert