ShuiBo'blog

人生若只如初见

嗨,我是水波 (@saber).


君以国士待我,我必国士报之。

执行shell_exec()方法返回为NULL

我想让php的www用户能执行命令,用shell_exec()命令执行了phpmd,我把这个文件夹权限改成了777为啥还是不能执行? 首先shell_exec()方法相比于exec()方法来说,它可以输出每行的输出信息,而后者仅仅只能输出最后一行的结果。 phpmd是使用composer执行安装的。我发现这些composer的工具用起来挺好用的,直接安装下然后执行bin里面的执行文件即可执行。更新安装都非常方便~ 在虚拟机上面执行下命令:

/data1/htdocs/vendor/vendor/phpmd/phpmd/src/bin/phpmd /data1/htdocs/ text codesize 在这个用户下是可以输出结果的,担心www用户不能执行,我就把整个phpmd文件夹设置成权限777。 为了确保文件能找到,我也是使用了绝对路径的。在php里面执行下面代码:

 var_dump(shell_exec("/data1/htdocs/pecker/security /data1/htdocs/rd3.i.beebank.com")); 但是输出的是个NULL。。。。。。。。。确实郁闷了,我也感觉是没有执行就报错了,感觉是shell_exec()这个方法仅仅只是输出标准输出流,错误流它是没有输出的。 然后就不懂了。就去百度了下,权限问题。。。。。。。。。。。。。。。。。。 但还是没有找到相关的,就去问俺二姐夫。。。。。。。。给了个网址,瞬间就觉得我找问题解决的能力还是太差了。T T http://stackoverflow.com/questions/18241305/shell-exec-returning-null-on-ls 这么明显的问题我都没有去搜。。。 解决这个问题的方法也很简单,因为错误流没有输出,就可以把错误流输出即可

add  ''2>&1'' to the end of your shell command to have STDERR returned as well as STDOUT.
$shell_return = shell_exec($shell_command." 2>&1"); 发现问题是:

string(45) "/usr/bin/env: php: No such file or directory " 我把原本是php脚本的文件改成执行文件了。。。

#!/usr/bin/env php 虚拟机的php是软连接,所以就会报php没找到,要添加绝对路径去执行就好了。

总结:

搜索问题原本自己觉得还是不错的。。。这次的问题发现自己还是没有达到一定的解决问题的能力。首先,php的函数可以去好文档函数详细的查找,之后再去google搜索,stackoverflow搜索。千万不要嫌英语烦!!!!!!!!!!!!!!!!! 安利个提问的智慧:http://www.dianbo.org/9238/stone/tiwendezhihui.htm

最近的文章

mysql建表时间格式优化

创建时间,更新时间设置成下面这样就可以自动设置时间跟更新时间。 `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,以前对于时间都是存时间戳或者datetime的格式,新get到技能喔~。DATETIME和TIMESTAMP都是精确到秒,优先选择TIMESTAMP,因为TIM...…

继续阅读
更早的文章

php7安装redis

①、下载phpredis:wget https://github.com/edtechd/phpredis/archive/php7.zip②、解压并编译安装phpredis:unzip php7redis.zipcd phpredis-php7/usr/local/php7/bin/phpize./configure --with-php-config=/usr/local/php7/bin/php-configmake && make installmake test③...…

继续阅读