现在的位置: 首页 > 综合 > 正文

全面总结php在cli命令行模式下的使用

2013年10月19日 ⁄ 综合 ⁄ 共 1714字 ⁄ 字号 评论关闭
文章目录

php cli命令行模式是WIN下的一个SHELL,不需要APACHE的支持就能执行PHP脚本的脚本,并且是持续执行的。这些特点很容易利用来快速测试PHP脚本。今天有人问到,我再次做一个全面总结。本文主要介绍了在PHP的CLI模式,即命令行模式下的使用入门,以及一些技巧和需要注意的问题。

(1)PHPCLI模式的进入和帮助

在你的命令行界面下,进入安装目录,执行以下命令D:/Dev/php5>php -help,
你就能看到你的输出了。其中打黄底的文字是你需要着重了解的功能。
Usage: php [options] [-f] [--] [args...]
       php [options] -r [--] [args...]直接执行代码
       php [options] [-B ] -R [-E ] [--]

[args...]
       php [options] [-B ] -F [-E ] [--]

[args...]
       php [options] -- [args...]
       php [options] -a

  -a               Run interactively交互运行
  -c | Look for php.ini file in this directory在这个目录寻

找php.ini文件
  -n               No php.ini file will be used不使用php.ini文件
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f         Parse and execute .
  -h               This help
  -i               PHP information类似phpinfo()函数
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r         Run PHP without using script tags ..?>直接运行代码。双引号包围,分号结尾
  -B   Run PHP before processing input lines
  -R         Run PHP for every input line
  -F         Parse and execute for every input line
  -E     Run PHP after processing all input lines
  -H               Hide any passed arguments from external tools.
  -s               Display colour syntax highlighted source.高亮显示代码
  -v               Version number版本信息
  -w               Display source with stripped comments andwhitespace.去除注释和空白后显示源代码
  -z         Load Zend extension .加载ZEND扩展

  args...          Arguments passed to script. Use -- args when first

argument
                   starts with - or script is read from stdin

  --ini            Show configuration file names

  --rf       Show information about function .显示一个函数的原型描述
  --rc       Show information about class .显示类的描述
  --re       Show information about extension .显示对扩展的描述
  --ri       Show configuration for extension .显示扩展配置信息

(2)几个使用介绍

①在命令行界面中处理输入输出

代码:if(!defined("STDIN")) {
define("STDIN", fopen('php://stdin','r'));
}
//php5.2里面STDIN已经定义了
echo "Hello! What is your name (enter below):/n";
$strName = fread(STDIN, 80);
echo 'Hello ',$strName, "/n";
?>
php_cli_stdout.JPG

②在PHP的CLI模式下直接运行代码:

php -r "echo 3*4";

③查看函数原型

>php --rf print_r
输出
Function [ function print_r ] {  - Parameters [2] {
    Parameter #0 [ $var ]
    Parameter #1 [
$return ]
  }
}

④显示PHP扩展的描述信息

>php --re exif
输出
Extension [ extension #30 exif version 1.4 $Id: exif.c,v
1.173.2.5.
2.25 2008/03/12 17:33:14 iliaa Exp $ ] {
  - Dependencies {
    Dependency [ standard (Required) ]
Dependency [ mbstring (Required) ]
  }
  - INI {
    Entry [ exif.encode_unicode ]
      Current = 'ISO-8859-15'
    }
    Entry [ exif.decode_unicode_motorola ]
      Current = 'UCS-2BE'
    }
    Entry [ exif.decode_unicode_intel ]
      Current = 'UCS-2LE'
    }
    Entry [ exif.encode_jis ]
      Current = ''
    }
    Entry [ exif.decode_jis_motorola ]
      Current = 'JIS'
    }
    Entry [ exif.decode_jis_intel ]
      Current = 'JIS'
    }
  }
  - Constants [1] {
    Constant [ integer EXIF_USE_MBSTRING ] { 1 }
  }
  - Functions {
    Function [ function exif_read_data ] {
      - Parameters [4] {
        Parameter #0 [ $filename ]
        Parameter #1 [
$sections_needed ]
        Parameter #2 [
$sub_arrays ]
        Parameter #3 [
$read_thumbnail ]
      }
    }
    Function [ function read_exif_data ] {
      - Parameters [4] {
        Parameter #0 [ $filename ]
        Parameter #1 [
$sections_needed ]
        Parameter #2 [
$sub_arrays ]
        Parameter #3 [
$read_thumbnail ]
      }
    }
    Function [ function exif_tagname ] {
      - Parameters [1] {
        Parameter #0 [ $index ]
      }
    }
    Function [ function exif_thumbnail ] {
      - Parameters [4] {
        Parameter #0 [ $filename ]
        Parameter #1 [
&$width ]
        Parameter #2 [
&$height ]
        Parameter #3 [
&$imagetype ]
      }
    }
    Function [ function exif_imagetype ] {
      - Parameters [1] {
        Parameter #0 [ $imagefile ]
      }
    }
  }
}

Dependency [ mbstring (Required) ]

注意:在这里我们看到了exif对mbstring的依赖关系,也就是说exif扩展必须依赖于mbstring。也就解决了APPSERV启动时弹出找不到mbstring.DLL的疑惑了。在某些集成的PHP环境包里也会在日志留下警告,表示找不到mbstring。因此,这个问题的解决方案是把mbstring在PHP.INI中的位置移到EXIF扩展之前。
可见,这个命令还是挺有用的。

⑤在命令行下,PHP读取输入参数

echo $_SERVER["argv"][1]."/n";
可以看到,参数是保存在argv这个数组里的

⑥把命令行下的输出保存到文件里

这个只要使用DOS的>重定向符号就可以了。

⑦连续读写文件操作。

set_time_limit(0);
while(true){
@fopen(time().".html","w");
sleep(6);
}
?>

(3)一些技巧和注意事项及解惑

①重复的在命令行下输入命令进入PHP所在的目录是很麻烦的,你可以把PHP所在的目录设置为环境变量或者写成一个BAT文件。下面是我的示例:
@ECHO OFF  
echo 把要执行的文件拖拽到这里就可以了,注意路径的配置  
set PHP_BIN=E:/dev/php/php.exe 
%PHP_BIN% -f %1  
pause 
这样的话使用起来就方便多了。我把它集成到了我的ultraedit编辑器中了。这个和在editplus中的集成很类似的,详细可以百度。
②命令行模式下的PHP执行起来可以不受超时限制的,因此你可以用它来做需要耗时很长的事,这也是它作为一个SHELL的强大之处,拥有丰富的函数。
③命令行模式下的输出是没有格式的,因此它并不会解释
换行符,若需要换行,请使用/r/n。
④关于PHP命令行模式下所使用的PHP.INI的谣言。之前一直有人声称即使在PHP.ini文件中开启了扩展,仍然无法连接数据库,是因为命令行模式下使用的是另外一套php.ini,和WEB使用的不是一套。但是我从PHP5.2用到PHP5.3.3,从来都没有遇到上述问题,一直可以正常连接,估计是他使用了集成环境包的问题。

define("DBHOST","localhost",true);
define("DBUSER","root",true);
define("DBNAME","sunny",true);
define("DBPASSWORD","123",true);
$conn=@mysql_connect(DBHOST,DBUSER,DBPASSWORD) or die('#1:failed on connecting database!');
if($conn!=null){
    echo '连接成功';
}
我这里是完全可以输出连接成功的,所以大家放心使用。

http://aiyooyoo.com/index.php/archives/144/

抱歉!评论已关闭.