php cli命令行模式是WIN下的一个SHELL,不需要APACHE的支持就能执行PHP脚本的脚本,并且是持续执行的。这些特点很容易利用来快速测试PHP脚本。今天有人问到,我再次做一个全面总结。本文主要介绍了在PHP的CLI模式,即命令行模式下的使用入门,以及一些技巧和需要注意的问题。
(1)PHPCLI模式的进入和帮助
在你的命令行界面下,进入安装目录,执行以下命令D:/Dev/php5>php -help,
你就能看到你的输出了。其中打黄底的文字是你需要着重了解的功能。
Usage: php [options] [-f]
php [options] -r [--] [args...]直接执行代码
php [options] [-B [-E
[args...]
php [options] [-B
[args...]
php [options] -- [args...]
php [options] -a
-a Run interactively交互运行
-c
找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
-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
-R Run PHP
for every input line
-F
-E
-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
args... Arguments passed to script. Use -- args when first
argument
starts with - or script is read from stdin
--ini Show configuration file names
--rf
--rc
--re
--ri
(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模式下直接运行代码:
php -r "echo 3*4";
③查看函数原型
>php --rf print_r
输出
Function [
Parameter #0 [
Parameter #1 [
}
}
④显示PHP扩展的描述信息
>php --re exif
输出
Extension [
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 [
- Parameters [4] {
Parameter #0 [
Parameter #1 [
Parameter #2 [
Parameter #3 [
}
}
Function [
- Parameters [4] {
Parameter #0 [
Parameter #1 [
Parameter #2 [
Parameter #3 [
}
}
Function [
- Parameters [1] {
Parameter #0 [
}
}
Function [
- Parameters [4] {
Parameter #0 [
Parameter #1 [
Parameter #2 [
Parameter #3 [
}
}
Function [
- Parameters [1] {
Parameter #0 [
}
}
}
}
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 '连接成功';
}
我这里是完全可以输出连接成功的,所以大家放心使用。