我没什么问题。当我在我的Raspberry Pi机器上输入PHP时:
system("echo hello");
它打印到网页。为什么?为什么它不打印到终端?
我在我的PuTTY上没有看到它。
非常感谢。
答案 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/0
。 ls /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中默认不是。