一个简单的命令行应用程序管理库


README

Build Status Total Downloads Discord

Utopia 框架 CLI 库是一个简单且轻量级的库,用于扩展 Utopia PHP 框架以能够编写命令行应用程序。这个库的目标是尽可能简单且易于学习和使用。此库由 Appwrite 团队 维护。

尽管这个库是 Utopia 框架 项目的一部分,但它没有依赖关系,可以与其他任何 PHP 项目或框架独立使用。

入门指南

使用 composer 安装

composer require utopia-php/cli

script.php

<?php
require_once './vendor/autoload.php';

use Utopia\CLI\CLI;
use Utopia\CLI\Console;
use Utopia\CLI\Adapters\Generic;
use Utopia\Http\Validator\Wildcard;

$cli = new CLI(new Generic());

$cli
    ->task('command-name')
    ->param('email', null, new Wildcard())
    ->action(function ($email) {
        Console::success($email);
    });

$cli->run();

然后,从命令行运行

php script.php command-name [email protected]

钩子

有三种类型的钩子,初始化钩子、关闭钩子和错误钩子。初始化钩子在任务执行之前执行。关闭钩子在任务执行后,在应用程序关闭之前执行。最后,错误钩子在任何应用程序生命周期中的错误发生时执行。您可以针对每个阶段提供多个钩子。

require_once __DIR__ . '/../../vendor/autoload.php';

use Utopia\CLI\CLI;
use Utopia\CLI\Console;
use Utopia\Http\Validator\Wildcard;

CLI::setResource('res1', function() {
    return 'resource 1';
})

CLI::init()
    inject('res1')
    ->action(function($res1) {
        Console::info($res1);
    });

CLI::error()
    ->inject('error')
    ->action(function($error) {
        Console::error('Error occurred ' . $error);
    });

$cli = new CLI();

$cli
    ->task('command-name')
    ->param('email', null, new Wildcard())
    ->action(function ($email) {
        Console::success($email);
    });

$cli->run();

日志消息

Console::log('Plain Log'); // stdout
Console::success('Green log message'); // stdout
Console::info('Blue log message'); // stdout
Console::warning('Yellow log message'); // stderr
Console::error('Red log message'); // stderr

执行命令

函数返回退出代码(0 - OK,>0 - 错误)并将标准输出、标准错误写入引用变量。超时变量允许您限制命令可以运行的时间数。

$stdout = '';
$stderr = '';
$stdin = '';
$timeout = 3; // seconds
$code = Console::execute('>&1 echo "success"', $stdin, $stdout, $stderr, $timeout);

echo $code; // 0
echo $stdout; // 'success'
echo $stderr; // ''
$stdout = '';
$stderr = '';
$stdin = '';
$timeout = 3; // seconds
$code = Console::execute('>&2 echo "error"', $stdin, $stdout, $stderr, $timeout);

echo $code; // 0
echo $stdout; // ''
echo $stderr; // 'error'

创建守护进程

您可以使用 Console::loop 命令创建您的 PHP 守护进程。`loop` 方法已经通过可配置的休眠函数处理 CPU 消耗,并且每 5 分钟调用一次 PHP 垃圾回收器。

<?php

use Utopia\CLI\Console;

include './vendor/autoload.php';

Console::loop(function() {
    echo "Hello World\n";
}, 1 /* 1 second */);

系统要求

Utopia 框架需要 PHP 7.4 或更高版本。我们建议尽可能使用最新的 PHP 版本。

版权和许可

MIT 许可证 (MIT) http://www.opensource.org/licenses/mit-license.php