php cli

其他类别 2025-08-19

PHP-CLI

PHP-CLI是一个简单的库,可帮助创建漂亮的命令行脚本。

它照顾

  • 选项解析
  • 帮助页面生成
  • 自动宽度调整
  • 彩色输出
  • 可选的PSR3兼容性

它是轻巧的,没有第三方依赖性。注意:这仅适用于非互动脚本。它没有阅读线或类似的支持。

安装

使用作曲家:

php composer.phar require splitbrain/php-cli

用法和示例

最小示例:

 #!/usr/bin/php

require __DIR__ . ' /../vendor/autoload.php ' ;
use splitbrain  phpcli  CLI ;
use splitbrain  phpcli  Options ;

class Minimal extends CLI
{
    // register options and arguments
    protected function setup ( Options $ options )
    {
        $ options -> setHelp ( ' A very minimal example that does nothing but print a version ' );
        $ options -> registerOption ( ' version ' , ' print version ' , ' v ' );
    }

    // implement your code
    protected function main ( Options $ options )
    {
        if ( $ options -> getOpt ( ' version ' )) {
            $ this -> info ( ' 1.0.0 ' );
        } else {
            echo $ options -> help ();
        }
    }
}
// execute it
$ cli = new Minimal ();
$ cli -> run ();

基本用法很简单:

  • 创建一个类并extend splitbrainphpcliCLI
  • 实现setup($options)方法和注册选项,参数,命令和设置帮助文本
    • $options->setHelp()添加了一般描述
    • $options->registerOption()添加一个选项
    • $options->registerArgument()添加一个参数
    • $options->registerCommand()添加一个sub命令
  • 实现main($options)方法,并在此处执行您的业务逻辑
    • $options->getOpts允许您访问设置选项
    • $options->getArgs()在删除选项后返回剩余的参数
    • $options->getCmd()返回用户使用的sub命令
  • 实例化您的课程并在其上拨打run()

在示例目录中可以找到更多示例。请参阅API文档以获取更多信息。

例外

默认情况下,CLI类注册了一个异常处理程序,并将将异常的消息打印给最终用户,并使用非零退出代码退出程序。您可以通过将false传递给构造函数来禁用此行为并捕获所有例外。

您可以使用所提供的splitbrainphpcliException来自行发出主码中的任何问题。当时,异常代码将用作退出代码。

stackTraces将在日志级别debug中打印。

彩色输出

彩色输出通过Colors类处理。它试图检测是否可用,然后使用终端颜色。您始终可以通过将脚本传递给--no-colors输出来抑制彩色输出。禁用颜色也将禁用表情符号前缀。

您可以使用Consinence Methods success() (green), info() (cyan), error() (红色)或fatal() (红色)打印简单的彩色日志消息。后者还将使用非零退出代码退出程序。

对于更复杂的着色,您可以在脚本中通过$this->colors访问颜色类。 wrap()方法可能是您要使用的。

表格格式允许着色完整列。使用该机制将颜色数组作为第三参数将其传递给其format()方法。请注意,您无法在第二个参数中传递彩色文本(文本长度计算和包装将失败,打破文本)。

表格格式

TableFormatter类允许您在多列中对齐文本。它试图自行找出可用的终端宽度。可以通过设置COLUMNS环境变量来覆盖它。

通过format()方法使用格式,该方法至少期望两个数组:第一个定义列宽度,第二个包含文本填充到列中。在每个列之间打印一个边框(默认情况下是一个空间)。

有关示例用法,请参见example/table.php

可以以三种形式给出列宽:

  • 通过提供整数来固定字符的宽度(例如15
  • 通过探明整数和百分比的预期(例如25%
  • 带有星号的单个流体“ REST”列(例如*

当混合固定宽度和百分比宽度时,百分比是指所有固定列分配后剩余空间。

边界空间自动计算。建议始终具有一些相对(百分比)或流体柱,以调整不同的端子宽度。

表格格式使用-h--help调用您的脚本时,可用于自动帮助屏幕。

PSR-3记录

CLI类是完全兼容的Logger(打印到STDOUT和STDERR的彩色日志数据)。当您从CLI调用后端代码(希望Logger实例在运行时产生任何明智的状态输出)时,这很有用。

如果您需要传递实现PsrLogLoggerInterface的类,则可以通过从实现此接口而不是splitbrainphpcliCLI两个提供的类之一来继承来实现。

  • 如果您使用的是splitbrainphpcliPSR3CLI的版本2(PHP <8.0)
  • 如果您使用的是PSR3的版本3(php> = splitbrainphpcliPSR3CLIv3

然后可以将结果对象作为logger实例传递。两者之间的区别是调整后的方法签名(仅带有适当的类型提示)。使用这些类时,请确保您已安装了建议的psr/log作曲家软件包。

注意:如果您的后端代码调用PSR-3 Logger,但实际上并未键入接口(又称loggeraware)的检查,则还可以通过splitbrainphpcliCLI的实例。

日志级别

您可以使用--loglevel参数调整CLI工具的详细性。受支持的loglevels是PSR-3 loglevels和我们自己的success水平:

  • 调试
  • 信息
  • 注意
  • 成功(在PSR-3中未定义)
  • 警告
  • 错误
  • 批判的
  • 警报
  • 紧急情况

所有日志级别的便利方法都可以使用。 PSR-3中所述的占位符插值也可用。 warning级别STDOUT消息将打印到以下所有STDERR

可以通过覆盖$logdefault成员来设置脚本的默认日志级别。

有关示例,请参见example/logging.php

下载源码

通过命令行克隆项目:

git clone https://github.com/splitbrain/php-cli.git