Re: Pipe the content of a variable to a process [message #173021 is a reply to message #173018] |
Thu, 17 March 2011 21:35 |
Marco
Messages: 11 Registered: March 2011
Karma:
|
Junior Member |
|
|
On 2011-03-17 Marco <netuse(at)lavabit(dot)com> wrote:
> Hi,
>
> how can I pipe the content of a variable into a process' standard input and
> save its output into another variable?
> [...]
I made some progress. But I still have problems. In the following example I
can use »cat« as process without problems. But gnuplot produces no output, but
a return value of zero, that means it's successfull. But where's the output?
When I call gnuplot with the »passthru« command it works as expected that
means that it is in the PATH and produces output on stdout with the given
input. What's the problem here?
<?php
$stdin_data = 'set terminal svg;plot sin(x)';
$descriptorspec = array(
0 => array( 'pipe', 'r' ), // stdin to read from
1 => array( 'pipe', 'w' ), // stdout to write to
2 => array( 'pipe', 'a' ), // stderr
);
// This works
// $process = proc_open( 'cat', $descriptorspec, $pipes );
// This doesn't produce output
$process = proc_open( 'gnuplot', $descriptorspec, $pipes );
if ( is_resource( $process ) ) {
fwrite( $pipes[0], $stdin_data );
fclose( $pipes[0] );
$content = stream_get_contents( $pipes[1] );
fclose( $pipes[1] );
fclose( $pipes[2] );
$return_value = proc_close( $process );
// cat and gnuplot return 0
echo $return_value . "\n";
echo $content;
// This works
// passthru( "gnuplot -e '$stdin_data'" );
}
?>
Marco
|
|
|