中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Linux编程
php中的exec函数并不想我想像的那样
作者:pwolf  时间:2007-11-07 17:08 出处:互连网 责编:月夜寒箫
              摘要:php中的exec函数并不想我想像的那样
  用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等函数应该也是类似的。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有