全面总结php在cli命令行模式下的使用
2011-02-22 11:41
936 查看
php cli命令行模式是WIN下的一个SHELL,不需要APACHE的支持就能执行PHP脚本的脚本,并且是持续执行的。这些特点很容易利用来快速测试PHP脚本。今天有人问到,我再次做一个全面总结。本文主要介绍了在PHP的CLI模式,即命令行模式下的使用入门,以及一些技巧和需要注意的问题。
你就能看到你的输出了。其中打黄底的文字是你需要着重了解的功能。
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 .显示扩展配置信息
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";
?>
输出
Function [ function print_r ] { - Parameters [2] {
Parameter #0 [ $var ]
Parameter #1 [ $return ]
}
}
输出
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扩展之前。
可见,这个命令还是挺有用的。
可以看到,参数是保存在argv这个数组里的
while(true){
@fopen(time().".html","w");
sleep(6);
}
?>
@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/
(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模式下直接运行代码:
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/
相关文章推荐
- php命令行模式(cli)的使用(总结)
- php cli 命令行模式使用类似shell交互read方法
- ThinkPHP3.2.3使用cli命令行模式
- CodeIgniter使用cli模式运行,把php作为shell编程
- (转)php-cli模式学习(PHP命令行模式)
- php cli模式学习(PHP命令行模式)
- php命令行(cli)模式下报require 加载路径错误的解决方法
- Thinkphp5 使用命令行模式(cli模式)
- php-cli模式学习(PHP命令行模式)
- php cli模式学习(PHP命令行模式)
- windows 下 ci 框架 命令行模式(cli)的使用
- php-cgi如何使用(php cli模式执行php文件)
- 直接命令行中执行PHP代码(PHP CLI模式)
- php cli模式学习(PHP命令行模式)
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
- 用Thinkphp写的简单程序在命令行执行(非 Thinkphp 下的cli模式 而是php下的命令模式)
- php cli模式学习(PHP命令行模式)
- 使用cli(命令行)方式执行php程序进行高效的程序调试
- php-cli模式学习(PHP命令行模式)
- PHP CLI模式介绍及使用教程