{"id":36704574,"url":"https://github.com/lvyahui8/rc-cmd","last_synced_at":"2026-01-12T11:41:31.406Z","repository":{"id":56985624,"uuid":"112356889","full_name":"lvyahui8/rc-cmd","owner":"lvyahui8","description":"php commond-tool library","archived":false,"fork":false,"pushed_at":"2019-08-04T15:07:51.000Z","size":40,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-10T11:15:15.830Z","etag":null,"topics":["command-line","command-line-tool","php-command","script"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lvyahui8.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-28T15:59:50.000Z","updated_at":"2023-04-03T11:37:23.000Z","dependencies_parsed_at":"2022-08-21T09:10:27.740Z","dependency_job_id":null,"html_url":"https://github.com/lvyahui8/rc-cmd","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/lvyahui8/rc-cmd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lvyahui8%2Frc-cmd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lvyahui8%2Frc-cmd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lvyahui8%2Frc-cmd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lvyahui8%2Frc-cmd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lvyahui8","download_url":"https://codeload.github.com/lvyahui8/rc-cmd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lvyahui8%2Frc-cmd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","command-line-tool","php-command","script"],"created_at":"2026-01-12T11:41:27.789Z","updated_at":"2026-01-12T11:41:31.395Z","avatar_url":"https://github.com/lvyahui8.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PHP 命令行脚本框架库\n\n## 背景\n\n部分业务使用PHP编写运维脚本, 但PHP缺乏一个易用的命令行程序开发库. 此框架的**基于注解的方式支持填空式**的快速开发命令行脚本. **并提供统一的日志|参数解析|控制台格式输出|帮助文档能力.**\n\n## 使用方法\n\n### 引入依赖\n\n在运维脚本项目中引入依赖.\n\n```\ncomposer require hongye/rc-cmd\n```\n\n### 编写运维工具类\n\n创建一个工具类比如SampleTool, 并继承`\\Ruochen\\Tools\\CommandTool`, 分别在类和方法上加上如下注解.  最终通过调用 `SampleTool::getInstance()-\u003eprocess();`  使类文件变为脚本, 并为类文件加上可执行权限.\n\n框架实现了一些易用的注解，基于注解快速定义命令、命令选项、命令参数.  由于PHP本身并不支持注解, 故注解需要添加在文档注释中.\n\n可以为IDE添加注解支持\n\n- Eclipse http://symfony.dubture.com/\n- PhpStorm http://plugins.jetbrains.com/plugin/7320-php-annotations\n\n#### @\\Ruochen\\Annotations\\Command\n\n此注解为工具定义一个命令，属性如下\n- name 可选值，如不设值，则命令名称为方法名\n- desc 可选值，命令的说明\n\n#### @\\Ruochen\\Annotations\\Operand\n此注解为命令定义一个操作数，属性如下\n- name 必须，操作数名称\n- mode 模式，枚举值{\"required\",\"multiple\",\"optional\"}\n    - required 表示此命令必须有此操作数\n    - multiple 表示此操作数是多个值\n    - optional 表示此操作数可选\n\n\n#### @\\Ruochen\\Annotations\\Option\n此注解为命令定义一个选项。此注解可以注解在class或者command method上，如果注解在class上，则在所有command method上都可以访问到\n- short 必须，选项缩写\n- long 长选项\n- mode 模式，枚举值\n    - noArg 表示无参数，常用语开关选项\n    - requiredArg 选项必须有参数 如：-f /var/mysqld.sock || --file=/var/mysqld.sock\n    - optionalArg 选项可选参数\n    - multipleArg 选项有多个参数\n\n\n## 示例\n\n命令工具文件 sample\n``` php\n#!/usr/bin/env php\n\u003c?php\n\nnamespace Ruochen\\Tools;\n\nuse League\\CLImate\\CLImate;\nuse Ruochen\\Annotations\\Command;\nuse Ruochen\\Annotations\\Desc;\nuse Ruochen\\Annotations\\Operand;\nuse Ruochen\\Annotations\\Option;\nuse Ruochen\\Foundation\\CommandTool;\nuse Ruochen\\Helpers\\ANSIHelper;\n/**\n * Class SampleTool\n * @package Examples\n * @Option(short=\"d\",long=\"database\",desc=\"select one database\",mode=\"requiredArg\")\n */\nclass SampleTool extends CommandTool {\n\n    /**\n     * @Command(desc=\"query_xxx\")\n     * @Operand(name=\"key\",mode=\"required\")\n     * @Desc(\"query some data\")\n     */\n    public function query(){\n        $database = $this-\u003egetOption('d');\n        $this-\u003elogger-\u003einfo(\"query.....$database\");\n    }\n\n    /**\n     * @Command(name=\"ll\")\n     * @Desc(value=\"list all data\")\n     * @Option(short=\"f\",long=\"filter\",mode=\"requiredArg\",desc=\"xxxxx\")\n     */\n    public function list(){\n        $cli = new CLImate();\n        $outTables [] = [\n            'Pid','Name','Stat',\n        ];\n        $outTables [] = [\n            1996, 'crond', ANSIHelper::colorWrap('OK', ANSIHelper::FG_BLUE),\n        ];\n        $outTables [] = [\n            1107, 'sshd', ANSIHelper::colorWrap('ERR', ANSIHelper::FG_READ),\n        ];\n        $outTables [] = [\n            1993, 'rsyslogd', ANSIHelper::colorWrap('UNKOWN', ANSIHelper::FG_YELLOW),\n        ];\n        $cli-\u003ecolumns($outTables);\n    }\n\n\n    /**\n     * @Command(\"dp\")\n     * @Desc(\"dump all data\")\n     */\n    public function dump(){\n        $this-\u003elogger-\u003einfo(\"dump.....\");\n    }\n}\n\n$sampleTool = SampleTool::getInstance();\n\n$sampleTool-\u003eprocess();\n```\n\n命令行提示\n```bash\n$ ./sample\nUsage: ./sample \u003ccommand\u003e [options] [operands]\n\nOptions:\n  -v, --version   Show version information and quit\n  -h, --help      Show this help and quit\n  -d, --database  select one database\n\nCommands:\n  query  query_xxx\n  ll     list all data\n  dp     dump all data\n```\n\n```\n$ ./sample ll\nPid      Name         Stat\n1996     crond        OK\n1107     sshd         ERR\n1993     rsyslogd     UNKOWN\n```\n\n```\n$ ./sample query xxxx -d lvyahui\n[2017-12-26 11:51:45] SampleTool.INFO: query.....lvyahui [] []\n```\n\n## 运行依赖\n\n- php \u003e= 7.0\n- mbstring\n- mcrypt\n- hash\n- composer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flvyahui8%2Frc-cmd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flvyahui8%2Frc-cmd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flvyahui8%2Frc-cmd/lists"}