魏长东

weichangdong

东邪

PHP SAPI之CLI

从版本 4.3.0 开始,PHP 提供了一种新类型的 SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为 CLI,意为 Command Line Interface,即命令行接口。顾名思义,该 SAPI模块主要用作 PHP 的开发外壳应用。CLI SAPI 和其它 SAPI 模块相比有很多的不同之处,我们将在本章中详细阐述。值得一提的是,CLI 和 CGI 是不同的 SAPI,尽管它们之间有很多共同的行为。

以下为 CLI SAPI 和其它 SAPI 模块相比的显著区别:

  • 与 CGI SAPI 不同,其输出没有任何头信息。

    尽管 CGI SAPI 提供了取消 HTTP 头信息的方法,但在 CLI SAPI 中并不存在类似的方法以开启 HTTP 头信息的输出。

    CLI 默认以安静模式开始,但为了保证兼容性, -q 参数使得您可以使用旧的 CGI 脚本。

    在运行时,不会把工作目录改为脚本的当前目录。(您可以使用 -C 参数来兼容 CGI 模式)。

    出错时输出纯文本的错误信息(非 HTML 格式)。

  • CLI SAPI 强制更改了 php.ini 中的某些设置,因为这些设置在外壳环境下是没有意义的。如max-execution-time,在cli模式下,是没有限制的。如argc(传送给应用程序参数的个数)和  argv(包含有实际参数的数组)在cli模式下,是可以使用的。

  • 为了减轻外壳环境下的工作,我们定义了如下常量:

    表格 25-2. CLI 专用常量

    常量名称 描 述
    STDIN 一个已打开的指向 stdin 的流。您可以用如下方法来调用:
    $stdin = fopen('php://stdin', 'r');
    STDOUT 一个已打开的指向 stdout 的流。您可以用如下方式来调用:
    $stdout = fopen('php://stdout', 'w');
    STDERR 一个已打开的指向 stderr 的流。您可以用如下方式来调用:
    $stderr = fopen('php://stderr', 'w');