执行shell_exec()方法返回为NULL
我想让php的www用户能执行命令,用shell_exec()命令执行了phpmd,我把这个文件夹权限改成了777为啥还是不能执行?
首先shell_exec()方法相比于exec()方法来说,它可以输出每行的输出信息,而后者仅仅只能输出最后一行的结果。
phpmd是使用composer执行安装的。我发现这些composer的工具用起来挺好用的,直接安装下然后执行bin里面的执行文件即可执行。更新安装都非常方便~
在虚拟机上面执行下命令:
1 |
|
在这个用户下是可以输出结果的,担心www用户不能执行,我就把整个phpmd文件夹设置成权限777。
为了确保文件能找到,我也是使用了绝对路径的。在php里面执行下面代码:
1 |
|
但是输出的是个NULL。。。。。。。。。确实郁闷了,我也感觉是没有执行就报错了,感觉是shell_exec()这个方法仅仅只是输出标准输出流,错误流它是没有输出的。
然后就不懂了。就去百度了下,权限问题。。。。。。。。。。。。。。。。。。
但还是没有找到相关的,就去问人。。。。。。。。给了个网址,瞬间就觉得我找问题解决的能力还是太差了。T Thttp://stackoverflow.com/questions/18241305/shell-exec-returning-null-on-ls
这么明显的问题我都没有去搜。。。
解决这个问题的方法也很简单,因为错误流没有输出,就可以把错误流输出即可
1 |
|
发现问题是:
string(45) "/usr/bin/env: php: No such file or directory "
我把原本是php脚本的文件改成执行文件了。。。
1 |
|
虚拟机的php是软连接,所以就会报php没找到,要添加绝对路径去执行就好了。
总结
搜索问题原本自己觉得还是不错的。。。这次的问题发现自己还是没有达到一定的解决问题的能力。首先,php的函数可以去好文档函数详细的查找,之后再去google搜索,stackoverflow搜索。千万不要嫌英语烦!!!!!!!!!!
安利个提问的智慧。
- 本文作者:Shuibo
- 本文链接:https://shuibo.me/2016/05/15/Executing-the-shell_exec()-method-returns-to-NULL.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!