sudiptochoudhury / php-cli

PHP 的简单命令行脚本,具有选项解析和彩色输出。无依赖项

1.2.0 2022-02-16 22:04 UTC

This package is auto-updated.

Last update: 2024-09-17 03:43:35 UTC


README

PHP-CLI 是一个简单的库,可以帮助创建看起来不错的命令行脚本。

fork 自 splitbrain/php-cli

它负责

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

它轻量且没有 第三方依赖项

安装

使用 composer

php composer.phar require sudiptochoudhury/php-cli

使用方法和示例

最小示例

#!/usr/bin/php
<?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();

Screenshot

基本用法很简单

  • 创建一个类并 extend splitbrain\phpcli\CLI
  • 实现 setup($options) 方法并注册选项、参数、命令并设置帮助文本
    • $options->setHelp() 添加一个通用描述
    • $options->registerOption() 添加一个选项
    • $options->registerArgument() 添加一个参数
    • $options->registerCommand() 添加一个子命令
  • 实现一个 main($options) 方法并在这里处理业务逻辑
    • $options->getOpts 允许你访问设置的选项
    • $options->getArgs() 返回移除选项后的剩余参数
    • $options->getCmd() 返回用户使用的子命令
  • 实例化你的类并调用它上的 run()

异常处理

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

您可以使用提供的 splitbrain\phpcli\Exception 在您的主代码中自行报告任何问题。异常的代码将用作退出码。

在日志级别 debug 上打印堆栈跟踪。

彩色输出

彩色输出通过 Colors 类处理。它尝试检测是否存在颜色终端,并且只有在存在颜色终端的情况下才会使用终端颜色。您可以通过将 --no-colors 传递给您的脚本始终抑制彩色输出。禁用颜色也会禁用表情符号前缀。

您可以使用便利方法 success()(绿色)、info()(青色)、error()(红色)或 fatal()(红色)来打印简单的彩色日志消息。后者也将以非零退出码退出程序。

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

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

表格格式化器

TableFormatter 类允许您在多个列中对文本进行对齐。它会自行尝试确定可用的终端宽度。它可以通过设置 COLUMNS 环境变量来重写。

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

请参阅 example/table.php 以获取示例用法。

列宽可以以三种形式给出

  • 提供一个整数以提供字符的固定宽度(例如 15
  • 通过提供整数和百分号(例如 25%)来表示百分比。
  • 一个单独的“剩余”列,用星号标记(例如 *)。

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

边框的空间会自动计算。建议始终有一些相对(百分比)或流体列来调整不同终端宽度。

表格格式化器用于当使用 -h--help 调用脚本时可以访问的自动帮助屏幕。

PSR-3 记录

CLI 类是一个完全符合 PSR-3 的记录器(将彩色日志数据打印到 STDOUT 和 STDERR)。当你从 CLI 调用期望 Logger 实例产生任何合理状态输出的后端代码时,这非常有用。

要使用此功能,只需从 splitbrain\phpcli\PSR3CLI 继承,而不是 splitbrain\phpcli\CLI,然后将 $this 作为记录器实例传递。确保已安装建议的 psr/log composer 包。

Screenshot

您可以使用 --loglevel 参数调整 CLI 工具的详细程度。支持的日志级别是 PSR-3 日志级别和我们的 success 级别。

  • 调试
  • 信息
  • 注意
  • 成功
  • 警告
  • 错误
  • 严重
  • 警报
  • 紧急

所有日志级别的便捷方法都可用。也支持 PSR-3 中描述的占位符插值。从 warning 级别开始的消息打印到 STDERR,所有以下级别都打印到 STDOUT

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

参见 example/logging.php 以获取示例。