在Linux上PHP没有权限执行exec命令的解决方法
相关官方参考资料
PHP exec Linux sudoers file Sudo Commands在fastcgi模式下运行时的修改方式
当PHP在fastcgi模式下运行时,它的权限继承自它的宿主程序。我们以apache为例进行讲解。首先我们需要找到apache运行的账户,然后使用vi或者vim编辑/etc/sudoers文件,在文件中增加下面参考示例中的内容。下面内容中先用ps命令查找apache的进程httpd,看返回结果最左边的账户信息,然后编辑sudoers文件,加入对apache账户的授权。
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
在php-fpm模式下运行时的修改方式
在php-fpm模式下运行时,它是以独立进程运行的。所以我们先找到它的运行账户,然后跟上面一样进行授权操作。
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
验证修改是否生效
经过上述操作,我们修改了授权,但是还并没有生效,我们需要对服务经行重启操作才能使我们的修改生效。根据我们的实际情况,把apache或php-fpm的服务重启。然后执行exec命令查看返回结果,如果正常获得返回结果则成功了。
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);