shell_exec()不会改变linux中的qdisc

时间:2016-04-23 06:49:19

标签: php linux shell-exec

对于我的项目,我正在创建用于控制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命令之前还有什么我应该做的事情?

2 个答案:

答案 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;
}