shell_exec() 不会更改 linux 中的 qdisc

shell_exec() doesn't change qdisc in linux

对于我的项目,我正在创建 WEB 界面来控制 Linux 中的 QoS。我正在尝试使用 shell_exec() 函数 PHP 与终端通信。如果尝试像这样简单的事情,它就会起作用:

shell_exec("ip link show");

但是如果尝试更改 qdisc(在终端中工作):

shell_exec("sudo tc qdisc replace dev eth0 root pfifo");

没有任何反应。如果我尝试 echo shell_exec(...);

我也没有得到任何输出

我是 运行 Ubuntu 14.04。我已经在 sudoers 文件中添加了行来执行 shell 没有密码的命令:

#includedir /etc/sudoers.d

%www-data ALL=NOPASSWD: /var/www/html

也许我对 sudoers 文件做错了什么,或者在 运行 shell_esec 命令之前我还应该做些什么?

这不是确切的答案,但请这样尝试。它对我有用。

2>&1 产生错误信息。

if(exec("sh  whatever your cammand 2>&1", $output, $return_var))
{
    print_r($output);
    exit;
}
%www-data ALL=NOPASSWD: /var/www/html

该 sudoers 行只允许 www-data 执行文件 /var/www/html。 (这可能是一个目录,而不是一个可执行文件,所以它什么都不做。)

如果您想允许 www-data 执行 tc,您需要在 sudoers 文件中指定,使用可执行文件的完整路径。