对于我的项目,我正在创建用于控制Linux中QoS的WEB界面。我正在尝试使用shell_exec()函数PHP与终端进行通信。如果尝试这样简单的东西,它就有效:
shell_exec("ip link show");
但如果尝试更改qdisc(在终端中工作):
shell_exec("sudo tc qdisc replace dev eth0 root pfifo");
没有任何反应。如果我尝试回显shell_exec(...); ,我也没有得到任何输出
我正在运行Ubuntu 14.04。我已经在sudoers文件中添加了一行来执行没有密码的shell命令:
#includedir /etc/sudoers.d
%www-data ALL=NOPASSWD: /var/www/html
也许我对sudoers文件做错了,或者在运行shell_esec命令之前还有什么我应该做的事情?
答案 0 :(得分:2)
%www-data ALL=NOPASSWD: /var/www/html
此sudoers行只允许www-data
执行文件/var/www/html
。 (这可能是一个目录,而不是一个可执行文件,因此它没有做任何事情。)
如果您想允许www-data
执行tc
,您需要使用可执行文件的完整路径在sudoers文件中指定。
答案 1 :(得分:1)
这不是确切的答案,但尝试这样。它对我有用。
2>&1
生成错误消息。
if(exec("sh whatever your cammand 2>&1", $output, $return_var))
{
print_r($output);
exit;
}