【原】关于shell_exec()和exec()
in 备忘 with 0 comment

【原】关于shell_exec()和exec()

in 备忘 with 0 comment

人要正直,因为在其中有雄辩和德行的秘诀,有道德的影响力。 --阿米尔

今天说的两个函数都是“危险”函数,如果你用的不好,会对你的系统系统安全造成不可估量的破坏!!

今天,在看小伙伴的代码的时候发现他有用到exec函数,用这个函数来运行Linux命令,一直以来我都是使用shell_exec的,所以手贱的google了下这两个函数的区别,结果很无语,就是exec只会输出代码运行结果的最后一行,而shell_exec会输出全部的运行结果。具体的示例,google或者百度下会有很多,这里就不再赘述。

我今天主要想要说的是,如果在使用shell_exec的时候发现执行命令失败该怎么办!!首先,我们明确一点,在Linux内部,权限的控制是很严格的,而shell_exec函数的实质就是模拟终端输入命令,得到结果,所以要想成功执行命令,就必须具备两个要素1、找到命令,2、有运行命令的权限。

找到命令

首先明确执行PHP脚本的是哪个用户,nginx是php-fpm的用户,Apache就是Apache的用户,当然这只是常规情况,如果你的是比较奇葩的配置,具体是哪个用户,得你自己去发现咯!其次使用终端切换到这个用户,先使用echo $PATH看看环境变量,如果没有就得加上你要的path,这里配置PATH和常规的终端配置还有点区别,这里需要修改的PHP-fpm的配置文件,因为web服务器软件,为了系统安全,会在配置文件内进行一次PATH过滤。

具备权限

如果我想操作一些别的文件夹内的文件,如果你没有读写的权限,那么坑定操作不成功的啊,所以需要你chown修改下你需要操作的文件的所有者,这样在不用修改777权限的情况下,无障碍的操作目标文件。

最后说两句,我所谈到的,都是常规的情况下,如果有些特殊的配置,还是需要你自己去找的,总之,找到命令,有执行权限,你就一定能成功,记住一定以执行PHP脚本的用户的身份去看命令和权限!

Comments are closed.