PHP Raspberry Pi系统()回显打印

时间:2014-12-28 20:42:38

标签: php stdout

我没什么问题。当我在我的Raspberry Pi机器上输入PHP时:

system("echo hello");

它打印到网页。为什么?为什么它不打印到终端?

我在我的PuTTY上没有看到它。

非常感谢。

3 个答案:

答案 0 :(得分:2)

system没有问题。此函数返回打印到stdout的所执行程序。在这种情况下,它是“你好”。

使用wall打印给所有人

正如Jasen建议的那样,您可以使用wall将其打印给使用该系统的所有人。如果您不知道tty的编号,这很有用,但如果您不以root身份运行它,它会向终端显示一个横幅。

system("echo test | wall");

手动打印到终端

要手动打印,不使用横幅和根,您可以将您的apache服务器用户添加到tty组,如下所示:(替换用户)

sudo usermod -a -G tty WEB_SERVER_USER

然后你可以沿着这些方向做点什么:

system("your command > /dev/pts/0");

$output = system("your command");
file_put_contents('/dev/pts/0', $output);

当然,假设您的终端已映射到/dev/pts/0ls /dev/pts/查看列表。

重定向stderr

除上述内容外,如果您的程序输出到stderr,则需要在命令末尾附加2>&1,例如:

system("your_command 2>&1 | wall");

这将重定向两个流。

在终端中运行脚本

您还可以使用php-cli在终端中运行脚本。要安装cli,请使用:

sudo apt-get install php5-cli

然后,在您的脚本中,您可以使用echo system("your_command 2>&1");并在终端中运行它:

php script.php

答案 1 :(得分:0)

这是因为web上下文stdout是返回浏览器的结果

如果你想写入登录用户的终端

$wall=popen("wall","w");
fwrite($wall,"Hello!\n");
pclose($wall);

他们必须打开“mesg”。 (我认为是默认的)

命令mesg y会将其打开,man mesg以获取更多信息。

答案 2 :(得分:0)

系统函数不会在任何附加的tty中执行命令,这就是为什么看不到附加到Putty会话的tty上的任何输出。

如果你想通过PHP向PiIO中的GPIO引脚发送命令,可以使用系统函数来执行system("echo 1 > /sys/class/gpio/xyz)之类的操作,但要注意php必须以root权限运行,而不是在Apache websever中默认不是。