http://www.php.net/manual/zh/features.commandline.php
从版本 4.3.0 开始,PHP 提供了一种新类型的
CLI SAPI
从 PHP 4.3.0开始,CLI/CGI 二进制执行文件的文件名、位置和是否存在会根据 PHP 在系统上的安装而不同。在默认情况下,当运行
Note:
由于
--enable-cli {PREFIX}/bin/php。和 --enable-cgi 同时默认有效,因此,不必再配置行中加上 --enable-cli 来使得 CLI 在 make install 过程中被拷贝到
在 PHP 4.2.0 到 PHP 4.2.3 之间的 Windows 发行包中,CLI 的文件名为
从 PHP 5 起,一个名为
Note:
如何得知自己使用的是哪个 SAPI? 在命令行下,运行
php -v php便能得知该 是 CGI 还是 CLI。请参考函数 php_sapi_name() 以及常量 PHP_SAPI
。
Note:
在 PHP 4.3.2 中加入了 Unix 的
man 页面。可以在命令行中键入 man php 来查看。
以下为
-
与
CGI SAPI 不同,其输出没有任何头信息。 尽管
CGI SAPI 提供了取消 HTTP 头信息的方法,但在 CLI SAPI中并不存在类似的方法以开启 HTTP 头信息的输出。 CLI 默认以安静模式开始,但为了保证兼容性,-q
和 --no-header 参数为了向后兼容仍然保留,使得可以使用旧的 CGI 脚本。 在运行时,不会把工作目录改为脚本的当前目录(可以使用
-C 和 --no-chdir 参数来兼容 CGI 模式)。 出错时输出纯文本的错误信息(非 HTML 格式)。
-
CLI SAPI
强制覆盖了 php.ini中的某些设置,因为这些设置在外壳环境下是没有意义的。 覆盖 php.ini 设置选项 设置选项 CLI SAPI默认值 备注 html_errors FALSE
无意义的 HTML 标记符会使得出错信息很凌乱,所以在外壳下阅读报错信息是十分困难的。因此将该选项的默认值改为 FALSE
。implicit_flush TRUE
在命令行模式下,所有来自 print 和 echo 的输出将被立即写到输出端,而不作任何地缓冲操作。如果希望延缓或控制标准输出,仍然可以使用 output buffering 设置项。 max_execution_time 0(无限值) 鉴于在外壳环境下使用 PHP 的无穷的可能性,最大运行时间被设置为了无限值。为 web 开发的应用程序可能只需运行几秒钟时间,而外壳应用程序的运行时间可能会长的多。 register_argc_argv TRUE
由于该设置为
TRUE
,将总是可以在CLI SAPI 中访问到 argc(传送给应用程序参数的个数)和 argv(包含有实际参数的数组)。 对于 PHP 4.3.0,在使用
CLI SAPI 时,PHP 变量 $argc 和 $argv 已被注册并且设定了对应的值。而在这之前的版本,这两个变量在 CGI 或者 模块 版本中的建立依赖于将 PHP 的设置选项 register_globals 设为 on。除了版本和register_globals 设定以外,可以随时通过调用 $_SERVER 或者$HTTP_SERVER_VARS 来访问它们。例如:$_SERVER['argv'] Note:
这些设置无法在设置文件
php.ini 或任何指定的其它文件中被初始化为其它值。这些默认值被限制在所有其它的设置文件被解析后改变。不过,它们的值可以在程序运行的过程中被改变(尽管对于该运行过程来说,这些设置项是没有意义的)。 -
为了减轻外壳环境下的工作,我们定义了如下常量:
CLI 专用常量 常量名称 描 述 STDIN
一个已打开的指向 stdin 的流。可以用如下方法来调用: