在php中,cli全称“Command Line Interface”,意思为“命令行接口”,是一种命令行运行模式,主要用作PHP的开发外壳应用,也就是用PHP来进行shell脚本的开发。

本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑

在php中,cli全称“Command Line Interface”,意思为“命令行接口”,是一种命令行运行模式。

PHP的CLI命令行运行模式浅析

在做开发的时候,我们不仅仅只是做各种网站或者接口,也经常需要写一些命令行脚本用来处理一些后端的事务。比如对数据进行处理统计等。当然也是为了效率着想,当一个事务有可能会有较长的耗时时,往往会交由服务器的定时器来固定时间调用脚本进行处理,从而让客户端能够有更好的用户体验。我们今天就来了解下 PHP 的命令行运行模式,也就是 PHP CLI 。

CLI 与 CGI

首先来看一下 CLI 和 CGI 的区别。我们都知道,Nginx 使用的是 FastCgi 来调用 PHP 的服务。CGI 是通用编程接口,也就是给调用者提供的一种使用本程序的接口。Nginx 这种类型的服务器并不是直接运行 PHP 程序的,而是通过 FastCgi 来执行 PHP 程序并获得返回结果。

CLI 则是 Command Line Interface,即命令行接口。主要用作 PHP 的开发外壳应用。也就是用 PHP 来进行 shell 脚本的开发。相比 linux 原生的 shell 来说,当然是方便了许多。在命令行状态下,直接使用 php 命令就可以运行某段 PHP 代码或某个 PHP 文件了。

另外,我们在命令行也可以直接使用 phpcgi 来运行一段 PHP 代码或者某个 PHP 文件,它和直接使用 php 命令来运行有什么区别呢?

  • CLI 的输出没有任何头信息

  • CLI 在运行时,不会把工作目录改为脚本的当前目录

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

强制覆盖了 php.ini 中的某些设置,因为这些设置在外壳环境下是没有意义的

// PHP的CLI命令行运行模式浅析.php
echo getcwd();

//  php-cgi dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php
// ...../MyDoc/博客文章/dev-blog/php/202004/source

// php dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php

我们选取最典型的一个例子,我们运行的这个文件中,使用 getcwd() 输出当前脚本运行的目录,可以看出两种运行方式输出的结果明显不同。php-cgi 是以文件所在目录为基准输出,而 php 则是以当前运行这个命令的目录为基准输出。

直接运行 PHP 代码

在做一些简单的调试的时候,我们可以直接通过 CLI 来运行一段代码。

// php -r "echo 121;"
// 121

也就是简单的加个 -r 参数,后面跟上一段代码,这段代码必须用引号括起来。而且这个引号更

php cli是什么意思