资讯专栏INFORMATION COLUMN

PHP中exec()函数执行系统命令失败

Cheng_Gang / 2036人阅读

摘要:但当我们在网站上访问的时候,我们此时的用户为如果不修改的执行权限的话,是无法执行成功的。

0.说明

在php中,我们可以使用exec()来执行系统命令,但有时我们会遇到exec()命令执行不成功,或者无返回的情况,下面来说明一下:

1.函数
  exec ( string $command [, array &$output [, int &$return_var ]] ) : string
  参数说明:
  1.$command   要执行的命令
  2.$output  执行结果
  3.$return_var 若同时设置 $output 和此变量,命令执行后的返回状态会被写入到此变量
2.例子
  exec("ping www.baidu.com", $output);

正常来说执行结果会跟在服务器上直接执行ping没区别,但是由于某些原因会导致意外情况,下边针对两种情况作出说明,以及解决办法

2.1 权限问题

问题

当我们在服务器上直接执行linux系统命令时(此处以ping为例),执行权限取决于我们登陆用户的权限,如果我们登陆用户为root ,则执行ping的时候是用root来执行。但当我们在网站上访问的时候,我们此时的用户为www,如果不修改ping的执行权限的话,是无法执行成功的。

解决

修改ping或者对应命令的执行权限
2.2 命令路径问题

问题

还有一种情况,当我们用exec执行某个命令时,不报错,也不返回结果,原因是此命令没有在环境变量配置的目录下即/etc/profile文件中,以ifconfig为例,我们可以用whereis ifconfig,找出此命令具体路径,比如路径在/usr/sbin下,两种解决办法:

解决

1 复制命令到/usr/bin下,也就是环境变量下的目录(不太推荐)
2 直接将命令全路径补全exec("/usr/sbin",$output);(推荐)
3 在环境变量中增加目标目录例如增加/usr/sbin到目录

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30082.html

相关文章

  • PHP高级语法总结

    摘要:一执行系统外部命令输出并返回最后一行结果。相同点都可以获得命令执行的状态码用提供的专门函数提供共了个专门的执行外部命令的函数,,。第二个参数是可选的,用来得到命令执行后的状态码。 php高级语法总结。 一、执行系统外部命令 system() 输出并返回最后一行shell结果。 exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。 pass...

    Hydrogen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<