splitbrain/php-cli
Composer 安装命令:
composer require splitbrain/php-cli
包简介
Easy command line scripts for PHP with opt parsing and color output. No dependencies
README 文档
README
PHP-CLI is a simple library that helps with creating nice looking command line scripts.
It takes care of
- option parsing
- help page generation
- automatic width adjustment
- colored output
- optional PSR3 compatibility
It is lightweight and has no 3rd party dependencies. Note: this is for non-interactive scripts only. It has no readline or similar support.
Installation
Use composer:
php composer.phar require splitbrain/php-cli
Usage and Examples
Minimal example:
#!/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();
The basic usage is simple:
- create a class and
extend splitbrain\phpcli\CLI - implement the
setup($options)method and register options, arguments, commands and set help texts$options->setHelp()adds a general description$options->registerOption()adds an option$options->registerArgument()adds an argument$options->registerCommand()adds a sub command
- implement the
main($options)method and do your business logic there$options->getOptslets you access set options$options->getArgs()returns the remaining arguments after removing the options$options->getCmd()returns the sub command the user used
- instantiate your class and call
run()on it
More examples can be found in the examples directory. Please refer to the API docs for further info.
Exceptions
By default, the CLI class registers an exception handler and will print the exception's message to the end user and exit the programm with a non-zero exit code. You can disable this behaviour and catch all exceptions yourself by passing false to the constructor.
You can use the provided splitbrain\phpcli\Exception to signal any problems within your main code yourself. The
exception's code will be used as the exit code then.
Stacktraces will be printed on log level debug.
Colored output
Colored output is handled through the Colors class. It tries to detect if a color terminal is available and only
then uses terminal colors. You can always suppress colored output by passing --no-colors to your scripts.
Disabling colors will also disable the emoticon prefixes.
Simple colored log messages can be printed by you using the convinence methods success() (green), info() (cyan),
error() (red) or fatal() (red). The latter will also exit the programm with a non-zero exit code.
For more complex coloring you can access the color class through $this->colors in your script. The wrap() method
is probably what you want to use.
The table formatter allows coloring full columns. To use that mechanism pass an array of colors as third parameter to
its format() method. Please note that you can not pass colored texts in the second parameters (text length calculation
and wrapping will fail, breaking your texts).
Table Formatter
The TableFormatter class allows you to align texts in multiple columns. It tries to figure out the available
terminal width on its own. It can be overwritten by setting a COLUMNS environment variable.
The formatter is used through the format() method which expects at least two arrays: The first defines the column
widths, the second contains the texts to fill into the columns. Between each column a border is printed (a single space
by default).
See the example/table.php for sample usage.
Columns width can be given in three forms:
- fixed width in characters by providing an integer (eg.
15) - precentages by provifing an integer and a percent sign (eg.
25%) - a single fluid "rest" column marked with an asterisk (eg.
*)
When mixing fixed and percentage widths, percentages refer to the remaining space after all fixed columns have been assigned.
Space for borders is automatically calculated. It is recommended to always have some relative (percentage) or a fluid column to adjust for different terminal widths.
The table formatter is used for the automatic help screen accessible when calling your script with -h or --help.
PSR-3 Logging
The CLI class is a fully PSR-3 compatible logger (printing colored log data to STDOUT and STDERR). This is useful when you call backend code from your CLI that expects a Logger instance to produce any sensible status output while running.
If you need to pass a class implementing the Psr\Log\LoggerInterface you can do so by inheriting from one of the two provided classes implementing this interface instead of splitbrain\phpcli\CLI.
- Use
splitbrain\phpcli\PSR3CLIif you're using version 2 of PSR3 (PHP < 8.0) - Use
splitbrain\phpcli\PSR3CLIv3if you're using version 3 of PSR3 (PHP >= 8.0)
The resulting object then can be passed as the logger instance. The difference between the two is in adjusted method signatures (with appropriate type hinting) only. Be sure you have the suggested psr/log composer package installed when using these classes.
Note: if your backend code calls for a PSR-3 logger but does not actually type check for the interface (AKA being LoggerAware only) you can also just pass an instance of splitbrain\phpcli\CLI.
Log Levels
You can adjust the verbosity of your CLI tool using the --loglevel parameter. Supported loglevels are the PSR-3
loglevels and our own success level:
- debug
- info
- notice
- success (this is not defined in PSR-3)
- warning
- error
- critical
- alert
- emergency
Convenience methods for all log levels are available. Placeholder interpolation as described in PSR-3 is available, too.
Messages from warning level onwards are printed to STDERR all below are printed to STDOUT.
The default log level of your script can be set by overwriting the $logdefault member.
See example/logging.php for an example.
splitbrain/php-cli 适用场景与选型建议
splitbrain/php-cli 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 869.48k 次下载、GitHub Stars 达 178, 最近一次更新时间为 2016 年 05 月 06 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「cli」 「console」 「command line」 「getopt」 「terminal」 「optparse」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 splitbrain/php-cli 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 splitbrain/php-cli 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 splitbrain/php-cli 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
This class provides you with an easy-to-use interface to progress bars.
A Wrapper for exec and it's results
Symfony bundle to monitor and execute commands
A Laravel package to retrieve data from Google Search Console
Additional artisan commands for Laravel
Shell command module for PHP.
统计信息
- 总下载量: 869.48k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 183
- 点击次数: 32
- 依赖项目数: 36
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-05-06

