php shell_exec遇到的一些坑
Posted bcoder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php shell_exec遇到的一些坑相关的知识,希望对你有一定的参考价值。
这里遇到的问题主要还是权限。
问题解决如下:
1.首先我们得去php.ini 开启 exec的权限:
#首先查找php.ini所在的位置
[root@instance-rh1f8o1o default]# find / -name php.ini
/usr/local/php/etc/php.ini
[root@instance-rh1f8o1o default]#
编辑 php.ini,找到
disable_functions = passthru,system,chroot,chgrp,chown,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
我们将exec,shell_exec 去掉。
别忘了重启php-fpm 和nginx
2.查看nginx的当前用户是谁,发现是 www
[root@instance-rh1f8o1o default]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 655 root 6u IPv4 1047840 0t0 TCP *:http (LISTEN)
nginx 656 www 6u IPv4 1047840 0t0 TCP *:http (LISTEN)
nginx 657 www 6u IPv4 1047840 0t0 TCP *:http (LISTEN)
bcm-agent 1420 root 9u IPv4 1074573 0t0 TCP instance-rh1f8o1o:49810->100.67.96.39:http (ESTABLISHED)
bcm-agent 1420 root 11u IPv4 1074475 0t0 TCP instance-rh1f8o1o:49794->100.67.96.39:http (ESTABLISHED)
[root@instance-rh1f8o1o default]#
然后我们需要将www增加root权限。方法如下:
## 编辑sudoers文件,找到这里,在root下方增加一行
www ALL=(ALL) NOPASSWD:ALL
[root@instance-rh1f8o1o default]# vim /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(ALL) NOPASSWD:ALL
这里注意,sudoers文件是只读的。所以编辑之前,我们需要给个可写权限
chmod 666 /etc/sudoers
到这里基本没啥问题了,如果你想使用wget命令,别忘记了,给项目目录及文件增加权限。如下:
[root@instance-rh1f8o1o default]# cd /home/wwwroot/default/
[root@instance-rh1f8o1o default]# ls
lnmp.gif ocp.php phpinfo.php phpmyadmin p.php wget
[root@instance-rh1f8o1o default]# chmod 777 -R wget/
[root@instance-rh1f8o1o default]#
以下是我的测试代码
$cmd = 'wget -P /home/wwwroot/default/wget/ https://github.com/threadshare/php/archive/master.zip';
$get = shell_exec($cmd);
var_dump($get);
$text = shell_exec("ls -l");
echo '====='.$text;
以上是关于php shell_exec遇到的一些坑的主要内容,如果未能解决你的问题,请参考以下文章