PHP 命令列指令碼框架庫
阿新 • • 發佈:2019-12-31
專案地址: github.com/lvyahui8/rc…
背景
部分業務使用PHP編寫運維指令碼,但PHP缺乏一個易用的命令列程式開發庫. 此框架的基於註解的方式支援填空式的快速開發命令列指令碼. 並提供統一的日誌|引數解析|控制檯格式輸出|幫助檔案能力.
使用方法
引入依賴
在運維指令碼專案中引入依賴.
composer require hongye/rc-cmd
複製程式碼
編寫運維工具類
建立一個工具類比如SampleTool,並繼承\Ruochen\Tools\CommandTool
,分別在類和方法上加上如下註解. 最終通過呼叫 SampleTool::getInstance()->process();
框架實現了一些易用的註解,基於註解快速定義命令、命令選項、命令引數. 由於PHP本身並不支援註解,故註解需要新增在檔案註釋中.
可以為IDE新增註解支援
- Eclipse symfony.dubture.com/
- PhpStorm plugins.jetbrains.com/plugin/7320…
@\Ruochen\Annotations\Command
此註解為工具定義一個命令,屬性如下
- name 可選值,如不設值,則命令名稱為方法名
- desc 可選值,命令的說明
@\Ruochen\Annotations\Operand
此註解為命令定義一個運算元,屬性如下
- name 必須,運算元名稱
- mode 模式,列舉值{"required","multiple","optional"}
- required 表示此命令必須有此運算元
- multiple 表示此運算元是多個值
- optional 表示此運算元可選
@\Ruochen\Annotations\Option
此註解為命令定義一個選項。此註解可以註解在class或者command method上,如果註解在class上,則在所有command method上都可以訪問到
- short 必須,選項縮寫
- long 長選項
- mode 模式,列舉值
- noArg 表示無引數,常用語開關選項
- requiredArg 選項必須有引數 如:-f /var/mysqld.sock || --file=/var/mysqld.sock
- optionalArg 選項可選引數
- multipleArg 選項有多個引數
示例
命令工具檔案 sample
#!/usr/bin/env php
<?php
namespace Ruochen\Tools;
use League\CLImate\CLImate;
use Ruochen\Annotations\Command;
use Ruochen\Annotations\Desc;
use Ruochen\Annotations\Operand;
use Ruochen\Annotations\Option;
use Ruochen\Foundation\CommandTool;
use Ruochen\Helpers\ANSIHelper;
/**
* Class SampleTool
* @package Examples
* @Option(short="d",long="database",desc="select one database",mode="requiredArg")
*/
class SampleTool extends CommandTool {
/**
* @Command(desc="query_xxx")
* @Operand(name="key",mode="required")
* @Desc("query some data")
*/
public function query(){
$database = $this->getOption('d');
$this->logger->info("query.....$database");
}
/**
* @Command(name="ll")
* @Desc(value="list all data")
* @Option(short="f",long="filter",mode="requiredArg",desc="xxxxx")
*/
public function list(){
$cli = new CLImate();
$outTables [] = [
'Pid','Name','Stat',];
$outTables [] = [
1996,'crond',ANSIHelper::colorWrap('OK',ANSIHelper::FG_BLUE),];
$outTables [] = [
1107,'sshd',ANSIHelper::colorWrap('ERR',ANSIHelper::FG_READ),];
$outTables [] = [
1993,'rsyslogd',ANSIHelper::colorWrap('UNKOWN',ANSIHelper::FG_YELLOW),];
$cli->columns($outTables);
}
/**
* @Command("dp")
* @Desc("dump all data")
*/
public function dump(){
$this->logger->info("dump.....");
}
}
$sampleTool = SampleTool::getInstance();
$sampleTool->process();
複製程式碼
命令列提示
$ ./sample
Usage: ./sample <command> [options] [operands]
Options:
-v,--version Show version information and quit
-h,--help Show this help and quit
-d,--database select one database
Commands:
query query_xxx
ll list all data
dp dump all data
複製程式碼
$ ./sample ll
Pid Name Stat
1996 crond OK
1107 sshd ERR
1993 rsyslogd UNKOWN
複製程式碼
$ ./sample query xxxx -d lvyahui
[2017-12-26 11:51:45] SampleTool.INFO: query.....lvyahui [] []
複製程式碼
執行依賴
- php >= 7.0
- mbstring
- mcrypt
- hash
- composer
專案地址: github.com/lvyahui8/rc…