exec函数注意的问题

from:http://doc.linuxpk.com/625.html
  
用php时间不短了,但亲自做过的东西不多,exec等函数以前没有接触过,只是看别人的文章中提到了一些。现在要写一个修改apache密码的小功能,实现的方法早就明确了,但在使用exec函数的时候遇到了问题。

exec函数的作用是执行系统命令行命令,其语法为:

  string exec ( string command [, array &output [, int &return_var]] )

  其中command为要执行的命令字符串,output是执行命令的输出内容,数组格式,一行为数组中的一条记录,return_var是执行命令的返回值。

  在dos下,直接执行htpasswd命令,不加任何参数,会得到类似如下的帮助:

  E:\cvswork\svntools>htpasswd

  Usage:

  htpasswd [-cmdpsD] passwordfile username

  htpasswd -b[cmdpsD] passwordfile username password

  ……

  因此,出于测试目的,先用exec同样执行一下这个命令看看效果,php代码如下:

  exec(’ e:\cvswork\svntools\htpasswd.exe’, $ar, $status);

  for ($i=0; $i < count($ar); $i++) $ar[$i] = htmlspecialchars($ar[$i]);

  $msg = implode(’<br />’ . “\r\n”, $ar);

  echo $msg;

  代码执行没有错误,但同样什么输出也没有,为什么呢?把命令换成dir或cd都能够正确执行,把htpasswd.exe换成pk.exe也没有问题,难道这个和htpasswd有关系?摸索1个来小时后,终于发现了问题所在。

  当使用exec执行不带任何参数的htpasswd.exe的时候,返回值$status是2,而带上参数“-nsb 1 1”以后,返回值是0,并且输出信息正常

  1:{SHA}NWoZK3kTsExUV00Ywo1G5jlUKKs=

  而执行htpasswd1.exe这个并不存在的文件的时候,返回值是1,并且没有任何输出信息。

  因此,我的结论就是,当exec函数执行命令正常,返回值为0的时候,才有输出信息,而当函数执行命令不存在或者返回错误代码的时候,就没有输出信息了。而htpasswd.exe恰好在不带任何参数执行的时候,虽然能够print出帮助信息,但返回状态为2,所以exec函数就没有返回任何输出信息了。

  和exec类似的system,passthru,shell_exec等函数应该也是类似的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值