from a php script I am trying to run an external command which is taking its input from a previous command with a pipe (at os level).
The command I want to use is pdftotext -nopgbrk -layout myfile.pdf -.
I have been able to get proc_open working with a file to read for input.
But I getting my input from a variable not from a file. The main command accepts its input from a pipe (at os level) like this : cat myfile.pdf | pdftotext -nopgbrk -layout - - to give the same result.
I would like to directly send the content of this variable without having to create a temporary file.
Can it be done ? and how ?
Here is a working example of what I don't want to do:
$data = <<<EOD
Hello
world!
EOD;
$tmpfname = tempnam("/tmp", "myPDF");
$handle = fopen($tmpfname, "w");
fwrite($handle, $data);
fclose($handle);
$cmd = "cat $tmpfname | grep -i hello";
$proc=proc_open($cmd,
array(
array("pipe","r"), //stdin
array("pipe","w"), //stdout
array("pipe","w") //stderr
),
$pipes);
$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
var_dump($stdout);
var_dump($stderr);
fclose($pipes[1]);
fclose($pipes[2]);
$exit_status = proc_close($proc);
echo $exit_status;
unlink($tmpfname);
how to get rid of the file manipulation part ? how get it working with $cmd = "grep -i hello"; instead of $cmd = "cat $tmpfname | grep -i hello"; ? how to use $data with proc_open ? (please no comment about grep or alternative to it, it is not the final command I plan to use, it is only to provide a quite portable example)
What about using echo instead of cat? So your command will be like:
Update
Or, why you don't simply pipe your data to your proc_open stdin? like the following: