PHP proc_open()管道通信

时间:2014-12-10 15:29:20

标签: php shell

上下文如下:

  • 我使用安装了PHP5Apache的Raspberry Pi并将其连接到LED显示屏。
  • Pi上有一些可执行文件可以使这个LED显示器工作。
  • 我希望我的php脚本能够通过一些API从网上获取数据并在LED上显示结果。

所以,显示效果很好。我在/ var / www /中安装了一个基于C的程序,这是一个例子

/var/www/sudo ./text-example -f fonts/5x8.bdf -r 16

( - f表示使用的字体,-r表示我的LED行数)

执行此操作时,您可以在shell中写入一些文本,并将其显示在LED上。

所以我用以下内容制作了一个简单的test.php脚本:$res = shell_exec('sudo ./test-example -f fonts/5x8.bdf -r 16');它也有效。我可以在STDIN

中输入消息

再远一点,现在我需要动态输入文字,所以我在proc_open()中执行了proc.php

<?php
$desc = array(0=>array("pipe", "r"), 1=>array("pipe", "w"));
$cwd = '/var/www/';
$process = proc_open('php test.php', $desc, $pipes, $cwd, NULL);

if (is_resource($process)) {
   fwrite($pipes[0], 'hello');
   fclose($pipes[0]);

}
?>

所以,现在我在shell中运行:php proc.php。一旦我用管道定义$desc,程序就会执行,然后停止。 LED显示屏没有显示任何内容。如果我删除$desc变量并删除管道内容(fwritefclose),我可以在shell中输入文本,它将正确执行,就好像它是test.php一样。我不明白为什么它不会让我STDINfwrite以及为什么php会被这些管道中断。

0 个答案:

没有答案