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:80COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnginx 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 anywhereroot ALL=(ALL) ALLwww ALL=(ALL) NOPASSWD:ALL

这里注意,sudoers文件是只读的。所以编辑之前,我们需要给个可写权限

chmod 666 /etc/sudoers

到这里基本没啥问题了,如果你想使用wget命令,别忘记了,给项目目录及文件增加权限。如下:

[root@instance-rh1f8o1o default]# cd /home/wwwroot/default/[root@instance-rh1f8o1o default]# lslnmp.gif ocp.php phpinfo.php phpmyadmin p.php wget[root@instance-rh1f8o1o default]# chmod 777 -R wget/[root@instance-rh1f8o1o default]#

以下是我的测试代码

<?php$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遇到的一些坑的主要内容,如果未能解决你的问题,请参考以下文章

PHP协程:并发 shell_exec

Libreoffice shell_exec 在 PHP 脚本中失败

docker搭建题目遇到的坑

docker搭建题目遇到的坑

iis下php 运行python 脚本

php函数file_exits,copy,shell_exec不在一台机器上工作,但相同的代码在不同的机器上工作