本文共 4560 字,大约阅读时间需要 15 分钟。
php cli命令行模式是WIN下的一个SHELL,不需要APACHE的支持就能执行PHP脚本的脚本,并且是持续执行的。这些特点很容易利用来快速测试PHP脚本。今天有人问到,我再次做一个全面总结。本文主要介绍了在PHP的CLI模式,即命令行模式下的使用入门,以及一些技巧和需要注意的问题。
在你的命令行界面下,进入安装目录,执行以下命令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模式下直接运行代码:
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://dytxi.baihongyu.com/