我想用PHP执行一个程序,这段代码将使用射频发射器切换我的灯。
这是通过命令行实现的:
action 63 A on
这只是一个C程序,有人写道来控制我的覆盆子pi上的GPIO引脚。所以我做了一个index.php
<?php
exec('action 63 A off');
?>
它没有做任何事情:
<?php
echo exec('action');
?>
给我程序的默认文本输出(关于要使用的参数的说明)。这告诉我PHP工作,程序位于,它可以执行。但我的灯没有打开。此外,在命令行上输入:
php index.php
按预期打开/关闭灯泡! (使用文件的第一个变种) Nginx(用户http)是否不允许打开/关闭灯泡?它被允许执行文件,至少它可以使它生成文本输出。
我也尝试过:
<?php
system('action 63 A off');
?>
还有一些像shell_exec
这样的品种想法?
答案 0 :(得分:2)
我解决了。 答案很简单,确实是用户&#34; http&#34;不允许执行C程序运行所需的布线图库。
最后我简单地说:
chmod +s action
(此set修改可执行文件(称为&#34; action&#34;)以始终以root权限运行。) ...并使用以下PHP文件(index.php)按预期运行代码:
<?php
system('action 63 A off');
?>
感谢您的帮助!
答案 1 :(得分:0)
是C程序的二进制文件,你可以传递参数吗?如果是这样,以下情况应该有效。
string exec ( string $command [, array &$output [, int &$return_var ]] )
例如
exec("controller.exe {$data}",$output);
数据是传递给可执行文件的参数,输出是来自可执行文件的任何响应。
请参阅here以获取示例
答案 2 :(得分:0)
考虑到echo exec('action')
正在运行但不是exec('action 63 A off')
,如果有参数,则表明命令失败。
如果是这种情况,为什么不为On
创建一个shell脚本/批处理文件,为Off
创建一个,并从PHP调用它们?
档案switch_on
内容:
action 63 A on
档案switch_off
内容:
action 63 A off
确保PHP可以访问switch_on
和switch_off
文件并具有执行权限。
switch_on.php
<?php
exec('switch_on');
?>
switch_off.php
<?php
exec('switch_off');
?>