2011-05-07
标签:cli 命令行
PHP提供了命令行模式的开发方法:cli,它可以用PHP来开发可以在命令行环境下执行的shell程序。
PHP的cli模式有以下特点:
PHP不会输出http头信息,因为命令行模式下这些信息是无意义的。
自动覆盖了php.ini某些设置,如:
  • html_errors=FALSE \\设为true,返回的错误信息中可以附带链接指向提供更详细错误描述的相关页面,显然这个特性在命令行下是无意义的。
  • implicit_flush=TRUE \\立即将输出内容发送到终端,不做任何缓冲,当然如果想使用输出缓冲功能,依然可以使用相关函数来设置。
  • max_execution_time=0 \\程序最大执行时间设置为无限。
  • register_argc_argv=TRUE \\决定PHP是否定义$argv和$argc两个全局变量,默认是false。在web环境下这个设置起作用的前提是register_globals=on。另外还可以用$_SERVER['argv']来访问他们,具体细节如何有待验证。

CLI模式下专用常量:
  • STDIN:标准输入流,即键盘输入流,常规模式下要获取键盘输入,PHP代码要这样写:$stdin = fopen('php//stdin','r');$input = fgets($stdin);而cli模式下可以简写成:$input = fgets(STDIN);
  • STDOUT标准输出流,一般来说即屏幕输出,它相当于:$stdout = fopen('php//stdout','w');
  • STDERR标准错误流,意义未明,它相当于:$stderr = fopen('php//stderr','w');

命令行下执行PHP程序的三种方式:
  • 直接执行PHP代码$ php -r "echo 'abcv' "
  • 运行php文件 $ php -f /home/abc.php 或者 $ php /home/abc.php,-f 是可以省去的
  • 通过标准输入获取要运行的php程序意义未明
和一般的shell程序一样,cli模式的php shell也可以在执行时获取参数,参数分为两种:
  • 一是php.exe本身的参数,如 -r 、-f 、-h等,它们以一个"-"开头,如 $ php -h;
  • 二是提供给php代码使用的参数,这种参数在php命令后以“--”来分隔,如 $ php -f /home/test.php -- test1 test2,不同参数间以空格分隔。

php代码内部使用全局变量$argv、$argc可以获取第二种即提供给php代码使用的参数。$argv是包含了所有参数的一个数组,下标0的元素是php程序本身的路径名称,如果是用-r模式(直接在命令行输入php程序),下表0的元素的值是“-”。下表大于0的元素依次对应命令行中提供的所有参数。$argc是$argv数组元素的数量,注意它并不等于参数的数量,因为第一个元素是php程序本身的路径名称。

常用的php .exe本身参数
  • -c (--php-ini) 重新制定一个放置php.ini的目录,php将在该目录下搜索php.ini,或者直接指定一个ini文件路径,它的名称就可以不是php.ini了
  • -n (--no-php-ini) 完全忽视php.ini
  • -d (--define) 重新定义php.ini中配置选项的值,如:$ php -d max_execution_time = 100
  • -e (--profile-info) 激活扩展信息模式,用于测试调试意义未明。
  • -f  (--file) 解析并运行给定的php文件,可省略
  • -h (--help) 显示帮助信息
  • -i (--info) 调用phpinfo()函数,输出结果
  • -m (--modules) 列出已经加载的模块
  • -r (--run) 执行在命令行输入的php代码,注意php代码部分应该用带引号包含,而不应用双引号,因为双引号中的变量会被在执行前解析,无法再作为变量来使用。

本博客文章非特别注明均属原创,如需转载请保留本博客地址:http://dao.daimaku.com
您的大名:
电子邮箱:
验证码: