php执行shell命令,可以使用下面几个函数:string system ( string $command [, int &$return_var ] )
string exec ( string $command [, array &$output [, int &$return_var ]] )
void passthru ( string $command [, int &$return_var ] )
注意的是:这三个函数在默认的情况下,都是被禁止了的,如果要使用这几个函数,就要先修改php的配置文件php.ini,查找关键字disable_functions,将这一项中的这几个函数名删除掉,然后注意重启apache。
首先看一下system()和passthru()两个功能类似,可以互换:
1 |
|
执行结果如下:
注意,system()会将shell命令执行之后,立马显示结果,这一点会比较不方便,因为我们有时候不需要结果立马输出,甚至不需要输出,于是可以用到exec()
exec()
的使用示例:
1 |
|
运行结果如下:
前言:php经常需要在服务器端使用exec()
来做一些事情,这时候很多事情都需要root权限来执行命令!默认都是不支持的。
一、查看启动你php的进程的用户是谁。
可以通过在命令行执行:ps -ef | grep php
来看。或者在php中执行 echo exec('whoami')
来查看。centos下默认会是nobody。 nobody默认没有任何权限(ubuntu下面是www-data)
此时先自己添加一个用户和组。
1 | /usr/sbin/groupadd xxxx |
加完用户后、vim /etc/passwd
里面就可以看到你添加的用户了。
二、修改php启动用户为您刚添加的用户
找到你得php安装的地方的php-fpm.conf 。打开配置文件、编辑里面的 user = xxxx; group = xxxx;
(xxxx为您刚才添加的用户)
重启php-fpm(service php-fpm restart)
重复上面查看php启动进程的用户、应该已经变了。
三、添加刚才的用户xxxx到sudoers里面
1 | vi sudo # 修改/etc/sudoers的内容 |
四、再次查看启动你php的进程的用户是谁。
1 |
|
可以看到现在的权限已经是root
五、到这里已经可以正常在exec中使用sudo your command
来执行命令了!!!!