PHP 执行 shell 命令

这两天用 PHP 做了一个后台,想调用 shell 命令来实现自动代码打包,遇到了 shell 命令执行没反应的问题。

后来在命令行下用 php 来执行,居然能正常工作,故而判断是权限配置的问题。

一、查看当前是哪个用户在运行 PHP

两种办法:

1、PHP 代码


echo shell_exec("id -a");

2、shell 命令 lsof -:80


[root@localhost dev_host]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 27556 root 6u IPv4 1135157 0t0 TCP *:http (LISTEN)
nginx 27558 apache 6u IPv4 1135157 0t0 TCP *:http (LISTEN)

这俩的结果都能看出来当前用户是 apache

二、添加用户 apache,并赋予 sudo 权限

vi /etc/sudoers,添加

root ALL=(ALL) ALL
apache ALL=(ALL) NOPASSWD:ALL

并将如下这行注释掉,表示不需要控制终端:

# Defaults requiretty

增加行 Defaults visiblepw,否则会出现 sudo: no tty present and no askpass program specified

最后使用 :w! 保存

三、执行命令的时候,一定要在命令最前面加上 sudo

不然会遇到调用命令,返回错误码 127 的情况。正确的姿势是:

sudo sh testshell

参考资料:

  • http://blog.csdn.net/iamduoluo/article/details/11765039
  • http://blog.csdn.net/agoago_2009/article/details/8266942
  • http://blog.csdn.net/wuhengwudi/article/details/7454094
  • http://blog.csdn.net/lxwxiao/article/details/8513355

你可能感兴趣的:(PHP 执行 shell 命令)