通过PHP执行Openwrt UCI命令

时间:2015-08-17 06:43:28

标签: php sh shell-exec openwrt

我正在使用PHP开发openwrt的简单(死简单)前端。为此,我需要通过PHP shell_exec()或system()函数调用许多openwrt UCI(统一配置接口)命令。我在终端尝试的所有UCI命令都运行得很好。但是,只要我通过上述功能运行它们就会无法正常工作。

作为一个例子,我运行以下两个在终端

中运行良好的命令
uci set wireless.@wifi-iface[0].ssid=test
uci commit

但是一旦我通过PHP运行它们就没有任何反应。他们根本不工作。我制作.sh文件并保存上面两行并使用PHP运行该文件但是再次!结果是一样的。但是当我通过终端执行.sh文件时,它可以工作!!

对于测试,我将两个文件权限设置为777.但这没有帮助。是否有任何其他要求通过PHP运行shell命令,如对PHP或Apache的root访问权限?我是新手,如果有人可以提供帮助我会感激不尽

我的apache error_log

[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] uci
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] : 
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] I/O error
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117]

我使用apache作为Web服务器并使用openwrt Chaos Calmer 15.05-rc3作为我在Raspberry pi 2之上的基本固件

2 个答案:

答案 0 :(得分:0)

我试图弄清楚同样的问题,到目前为止我的结论是使用root权限运行php。我知道这不安全,但至少它有效。来自/etc/init.d/php5-fpm一行以root权限运行php-fpm:

service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE

这里的关键标志:
-R, - 允许以root身份运行
允许池以root身份运行(默认情况下禁用)

答案 1 :(得分:0)

两个答案都是正确的。 sameera提到的是 uhttpd 具有在LEDE或OPENWRT上运行的特殊权限(默认情况下)的事实,但是Anton Glukhov所写的内容也是正确的,它允许我以根,但仅限于避免错误。我无法像 uhttpd 一样运行脚本(.sh),但是php可以正常运行,并且以root身份运行时没有任何错误。我猜默认它在带有Openwrt的Nginx上是文件权限问题。我的解决方案是让uhttpd在其他端口上运行,并以所有权利和权限运行我的程序,同时以非root身份在Nginx中运行其他所有程序。就我而言,安全性不是问题,它是脱机服务器。

service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE

在我的案例中,编辑工作是在-R中添加/etc/init.d/php7-fpm标志