2015-07-19 2 views
6

In timer.php Ich habe dies:In PHP Ich bin leider nicht möglich, Rohr von einem Prozess zu einem anderen

$handle = fopen('php://stdout', 'wa') ;  
$unusedEvTimerObject = new EvTimer(0, 1, function ($watchercallback) use ($handle) { //create & call timer 
    echo "=>".(Ev::iteration() % 60)."<="; 
    fwrite($handle, "Hello World! \n"); 
}); 
    Ev::run(); 
fclose($handle); 

Und in child.php Ich habe dies:

$descriptorspec = array(
    0 => array("pipe", "r"), 
    1 => array("pipe", "w"),   
    2 => array("file", "/tmp/error-output.txt", "a") 
); 

$process = proc_open('php ', $descriptorspec, $pipes); 

if (is_resource($process)) { 
    fwrite($pipes[0], "<? include('app/timer.php'); ?>"); 
    fclose($pipes[0]); 

    $output = ""; 
    while (!feof($pipes[1])) { 
     $output .= fgets($pipes[1]); 
    }; 
    fclose($pipes[1]); 

    $return_value = proc_close($process); 

    echo "command returned $return_value\n"; 
} 

Wenn ich rufe mit

$ php app/timer.php

der Ausgang I „=> 1 < = Hallo Welt erhalten timer.php direkt! => 2 < = Hallo Welt! "

aber wenn ich mit $ php app/child.php aufrufen bekomme ich keine Ausgabe, während ich erwarten würde, dass stdout von timer.php in child.php umleiten und von ihm gedruckt werden.

Ich fummle ein bisschen & Ich rate, child.php bekommt keine Eingabe, aber ich kann nicht sehen, warum. Halbe!

+1

Sie könnten versuchen, alle Ausgaben im Puffer in der untergeordneten Datei aufnehmen, dann Ausgabe, die es am Ende –

Antwort

1

Der $ -Ausgang wird nicht im Beispielcode gedruckt.

while (!feof($pipes[1])) { 
    echo fgets($pipes[1]); 
}; 

$ Rufaufbau> php child.php druckt dann den Timer Ausgang