PHP-Console-Color 使用指南:在 PHP 中轻松创建彩色控制台输出
开发工具【免费下载链接】PHP-Console-ColorSimple library for creating colored console ouput项目地址https://gitcode.com/gh_mirrors/ph/PHP-Console-Color点击查看免费下载PHP-Console-Color 是一个专注于「彩色控制台输出」的轻量级 PHP 库核心描述只有一句话——Simple library for creating colored console output全部能力封装在JakubOnderka\PhpConsoleColor\ConsoleColor一个类中。本文以仓库 README.md 为骨架结合 example.php 的使用流程、src/ConsoleColor.php 的源码实现与 tests/ConsoleColorTest.php 的测试用例完整讲解安装方式、全部可用样式与 256 色扩展、自定义主题、平台检测原理与强制输出等实战要点读完即可在自己项目中直接落地彩色 CLI 输出。项目定位为控制台输出上色的轻量级 PHP 库根据 README.md 的说明本项目的定位是「一个用于创建彩色控制台输出的简单库」。它的使用入口非常明确README 直接引导读者查看 example.php 来学习用法即「看示例即可上手」。从 composer.json 可以进一步确认项目的基本事实包名jakub-onderka/php-console-color许可证BSD-2-ClausePHP 版本要求 5.4.0兼容性较广自动加载PSR-4命名空间JakubOnderka\PhpConsoleColor\映射到src/目录核心类只有两个——ConsoleColor.php 和 InvalidStyleException.php维护状态composer.json中声明了abandoned: php-parallel-lint/php-console-colorREADME 也明确标注This repository is abandoned。这意味着官方建议使用替代包php-parallel-lint/php-console-color本文只转述包名读者可在 Packagist 检索。如果项目仍在使用旧版本本仓库的实现细节与 API 完全可供参考功能是自洽完整的。另外README 顶部还嵌有 Travis CI 构建状态徽章并配有一张 Windows 10 下的实际运行效果截图图中展示了样式名自着色与 256 色色板输出效果验证了「彩色输出在 Windows 终端同样可用」。安装与引入由于包已标记 abandoned正式新项目建议直接依赖替代包php-parallel-lint/php-console-color若因历史项目锁定等原因必须使用本版本可按常规方式安装composer require jakub-onderka/php-console-color安装完成后通过 Composer 生成的 autoloader 引入即可example.php 中正是这样做的?php $loader require_once __DIR__ . /vendor/autoload.php; $consoleColor new JakubOnderka\PhpConsoleColor\ConsoleColor();核心类ConsoleColor位于JakubOnderka\PhpConsoleColor命名空间下对应 composer.json 中的 PSR-4 映射构造函数会自动探测当前终端是否支持颜色详见后文「平台检测」一节所以new ConsoleColor()之后无需任何初始化即可直接使用。快速上手example.php 完整流程拆解example.php 是官方指定的唯一使用示例全流程只有三条核心 APIisSupported()、are256ColorsSupported()与apply()。完整代码如下含逐行中文注释?php $loader require_once __DIR__ . /vendor/autoload.php; $consoleColor new JakubOnderka\PhpConsoleColor\ConsoleColor(); // 1. 当前终端是否支持 ANSI 颜色Windows / Unix 各自探测 echo Colors are supported: . ($consoleColor-isSupported() ? Yes : No) . \n; // 2. 是否支持 256 色扩展 echo 256 colors are supported: . ($consoleColor-are256ColorsSupported() ? Yes : No) . \n\n; // 3. 支持颜色时遍历所有内置样式用该样式名本身作为文本进行着色演示 if ($consoleColor-isSupported()) { foreach ($consoleColor-getPossibleStyles() as $style) { echo $consoleColor-apply($style, $style) . \n; } } echo \n; // 4. 支持 256 色时分别打印 1~255 号前景色与背景色色板 if ($consoleColor-are256ColorsSupported()) { echo Foreground colors:\n; for ($i 1; $i 255; $i) { echo $consoleColor-apply(color_$i, str_pad($i, 6, , STR_PAD_BOTH)); if ($i % 15 0) { // 每 15 个换行 echo \n; } } echo \nBackground colors:\n; for ($i 1; $i 255; $i) { echo $consoleColor-apply(bg_color_$i, str_pad($i, 6, , STR_PAD_BOTH)); if ($i % 15 0) { echo \n; } } echo \n; }这段示例揭示了该库的典型使用模式先探测后使用isSupported()为false时apply()会直接原样返回文本不产生任何转义序列因此「不支持颜色的终端上输出也不会出现乱码」是库的默认安全行为样式名即 API样式以字符串形式传入apply($style, $text)getPossibleStyles()可以拿到全部内置样式名256 色采用命名约定前景色写作color_N背景色写作bg_color_NN取值范围 1~255打印色板是天然的自测手段循环调用apply()就能快速验证终端能力与输出效果。内置样式与颜色全集对照表getPossibleStyles()返回的样式名来源于 src/ConsoleColor.php 中定义的$styles属性。下表为全部内置样式名及其对应的 ANSI 转义码可直接复制使用文本修饰样式样式名ANSI 码说明none无不产生任何转义序列bold1加粗dark2变暗弱化italic3斜体underline4下划线blink5闪烁reverse7反显前景/背景互换concealed8隐藏前景色16 色样式名ANSI 码样式名ANSI 码default39dark_gray90black30light_red91red31light_green92green32light_yellow93yellow33light_blue94blue34light_magenta95magenta35light_cyan96cyan36white97light_gray37背景色16 色样式名ANSI 码样式名ANSI 码bg_default49bg_dark_gray100bg_black40bg_light_red101bg_red41bg_light_green102bg_green42bg_light_yellow103bg_yellow43bg_light_blue104bg_blue44bg_light_magenta105bg_magenta45bg_light_cyan106bg_cyan46bg_white107bg_light_gray47可以看到除none外所有样式都对应标准 ANSI SGRSelect Graphic Rendition参数这正是该库「简单」的体现不做终端抽象只做样式名到 ANSI 码的映射与组合。256 色扩展color_N与bg_color_N除了上述 16 色库还支持标准的 256 色模式。样式名采用正则~^(bg_)?color_([0-9]{1,3})$~见 src/ConsoleColor.php进行解析前景色color_255→ ANSI 序列38;5;255背景色bg_color_255→ ANSI 序列48;5;255。由 src/ConsoleColor.php 中styleSequence()的实现可知当传入的样式不在内置$styles表中时会先尝试匹配 256 色正则匹配成功则按$type;5;$value拼接序列——38/48分别代表前景/背景5表示 256 色模式$value为颜色编号。两个使用要点编号范围 1~255正则[0-9]{1,3}限定最多 3 位数字color_255合法而color_21344 位会匹配失败直接抛出InvalidStyleException——这一行为在 tests/ConsoleColorTest.php 的testApplyInvalid256Color中明确验证。依赖终端能力styleSequence()中会先调用are256ColorsSupported()如果终端不支持 256 色该样式将被跳过返回null并在后续被过滤掉退化为无颜色输出。因此 256 色功能在使用前应通过are256ColorsSupported()判断example.php 正是先探测再打印色板。自定义主题Theme系统如果不想每次都用apply(red, ...)这样的原始样式名库提供了主题机制可以把多个样式打包成一个有语义的名字。相关 API 全部实现在 src/ConsoleColor.phpaddTheme($name, $styles)新增一个主题$styles可为单个样式字符串或样式数组内部会逐一校验样式合法性非法样式会抛出InvalidStyleExceptionsetThemes(array $themes)一次性覆盖全部主题先清空再逐个addThemegetThemes()获取全部主题hasTheme($name)判断主题是否存在removeTheme($name)删除主题。示例$consoleColor-addTheme(error, array(white, bg_red, bold)); $consoleColor-addTheme(success, green); // apply 时直接使用主题名主题与普通样式还可以混用 echo $consoleColor-apply(error, Something went wrong!) . \n; echo $consoleColor-apply(array(success, underline), All done.) . \n;主题在apply()中的处理逻辑见 src/ConsoleColor.php遍历样式数组时若样式名命中了$themes中的主题则通过themeSequence()展开为该主题下的全部底层样式序列。例如主题bold_dark[bold, dark]展开后即\033[1;2m...\033[0m与直接apply([bold, dark], ...)效果一致。测试 tests/ConsoleColorTest.php 的testSetOwnTheme、testAddOwnTheme、testAddOwnThemeArray、testOwnWithStyle分别覆盖了设置主题、字符串/数组形式添加主题以及「主题 普通样式混用」四种场景。apply() 核心流程与输出原理apply($style, $text)是整个库的心脏其完整逻辑见 src/ConsoleColor.php分为五步能力门控若未强制样式setForceStyle(false)且终端不支持颜色直接原样返回$text参数归一化样式字符串会先转成单元素数组类型非法非字符串/数组抛出\InvalidArgumentException样式解析逐个解析命中主题则展开主题序列命中内置样式或 256 色正则则取对应序列否则抛出InvalidStyleException过滤空序列array_filter去掉null如none或 256 色不被支持时若最终没有可用序列则返回原文包装输出所有序列以;连接用escSequence()包成\033[{值}m最后追加\033[0mRESET_STYLE复位。由此可知最终的 ANSI 结构是\033[code1;code2;...m 文本 \033[0m。组合样式时序列按传入顺序拼接例如apply([bold, dark], text)输出\033[1;2mtext\033[0m见testBoldAndDark256 色前景 背景组合输出\033[38;5;200;48;5;255mtext\033[0m见test256ColorForegroundAndBackground。异常体系方面InvalidStyleException.php 继承自\Exception构造时接收样式名并生成消息Invalid style {name}.非法参数类型则抛出标准\InvalidArgumentException。两种异常在 tests/ConsoleColorTest.php 中都有对应的预期异常测试。平台检测何时认为终端支持颜色isSupported()与are256ColorsSupported()是决定是否输出转义序列的前置判断其实现src/ConsoleColor.php按操作系统区分探测策略方法WindowsDIRECTORY_SEPARATOR \\Unix/Linux/macOSisSupported()① 存在sapi_windows_vt100_support()且对STDOUT返回真② 或环境变量ANSICON已设置③ 或ConEmuANSI等于ON存在posix_isatty函数且posix_isatty(STDOUT)为真are256ColorsSupported()存在sapi_windows_vt100_support()且对STDOUT返回真环境变量TERM中包含子串256color几个值得注意的实现细节ConsoleColor构造函数会预先调用一次isSupported()并把结果缓存到$isSupported属性src/ConsoleColor.php运行时apply()每次读取的是缓存值posix_isatty判断的是标准输出是否连接到终端tty因此把输出重定向到文件或管道时Unix 下通常会被判定为「不支持颜色」避免把 ANSI 转义码写进日志文件Windows 下sapi_windows_vt100_support(STDOUT)是 PHP 7.1 提供的 VT100 支持探测ANSICON/ConEmuANSI则是为旧终端模拟器如 ANSICON、ConEmu保留的兼容分支。强制样式输出setForceStyle()有些场景下即使终端被判定为不支持颜色也需要强制输出转义序列——例如把彩色日志通过管道交给 CI 系统或写入需要保留 ANSI 码的文件。这时可使用setForceStyle(true)$consoleColor-setForceStyle(true); // 即使 isSupported() 返回 false也会输出 \033[1mtext\033[0m echo $consoleColor-apply(bold, text);对应实现见 src/ConsoleColor.phpapply()中的第一道门控是「!isStyleForced() !isSupported()」——只要强制开启能力检测结果即被绕过。测试 tests/ConsoleColorTest.php 的testBoldColorsAreNotSupportedButAreForced专门验证了「不支持但强制」时仍输出完整转义序列testForceStyle则验证了开关的存取。测试与验证方式仓库使用 PHPUnit 作为测试框架配置见 phpunit.xmlbootstrap 为./vendor/autoload.php测试目录为tests按*Test.php后缀发现测试类代码覆盖率统计会忽略vendor目录。安装开发依赖后即可运行全部测试composer install vendor/bin/phpunittests/ConsoleColorTest.php 共 21 个测试方法覆盖了样式应用、组合样式、256 色、主题管理、能力探测、强制样式与异常路径等全部核心行为。值得留意的是测试通过继承ConsoleColor并覆写isSupported()/are256ColorsSupported()构造了ConsoleColorWithForceSupport子类见文件头部从而绕开真实终端环境、在确定条件下断言输出序列——这种「依赖注入 覆写探测点」的思路也适合参考迁移到自己的项目。使用注意事项与替代方案综合 README 与 composer.json 的信息使用本包时有几点需要留意仓库已停止维护README 明确标注 abandonedcomposer.json的abandoned字段指向替代包php-parallel-lint/php-console-color。Packagist 在安装时也会给出弃用提示新项目应直接使用替代包本仓库可作为实现与 API 的参考资料PHP 版本require为 5.4.0在较新的 PHP 版本上运行老代码通常没有问题但需自行验证无颜色时的默认行为是安全的不支持的终端上apply()返回原文不会出现乱码需要保留 ANSI 码时再考虑setForceStyle(true)样式名区分大小写内置样式均为小写命名如light_red、bg_light_gray命名空间JakubOnderka\PhpConsoleColor中的类名首字母大写使用时注意精确匹配否则会触发InvalidStyleException。总而言之PHP-Console-Color 用不到 300 行源码解决了一个小而实用的痛点把「给控制台文本上色」封装成apply(样式, 文本)这一简单调用并提供完整的样式表、256 色扩展与主题机制。理解它的源码与测试不仅可以直接掌握 ANSI 转义序列在 PHP 中的组合技巧也能为后续平滑迁移到官方推荐的替代包打好基础。赞分享开发工具【免费下载链接】PHP-Console-ColorSimple library for creating colored console ouput项目地址https://gitcode.com/gh_mirrors/ph/PHP-Console-Color点击查看免费下载相关推荐GLM-4.1V-9B-Thinking-8bit性能测试M2 Pro上15.8 tok/s解码速度与11.89GB内存占用实测GLM 4.1V 9B Thinking 8bit性能测试M2 Pro上15.8 tok/s解码速度与11.89GB内存占用实测 GLM 4.1V 9B ThPHP Console Color终端彩色输出的终极指南与最佳实践PHP Console Color终端彩色输出的终极指南与最佳实践 PHP Console Color是一个简单而强大的PHP库专门用于在控制台终端中创建丰开发工具Polyglot-Ko-3.8B-Total推理代码详解使用OpenMind库实现高效文本生成Polyglot Ko 3.8B Total推理代码详解使用OpenMind库实现高效文本生成 想要快速上手韩国语大语言模型polyglot ko 3.8b上一篇BentoML 类型存根工程实践typings 目录的构建、验证与第三方库 .pyi 文件贡献流程下一篇Obsidian Banners插件终极指南如何为你的笔记添加精美横幅图片创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Folia PWA 教程:3 分钟把歌词动画播放器装进手机

Folia PWA 教程:3 分钟把歌词动画播放器装进手机

Folia PWA 教程:3 分钟把歌词动画播放器装进手机 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是一款主打绚丽歌词动画的本…

2026/10/15 2:23:20 阅读更多 →
Kiln Evals V2 Cleanup 架构解析:V2EvalResult 契约迁移与八项精准修复实战

Kiln Evals V2 Cleanup 架构解析:V2EvalResult 契约迁移与八项精准修复实战

人工智能AI 应用AI 评测RAG微调提示工程开发工具桌面应用 【免费下载链接】Kiln Build, Evaluate, and Optimize AI Systems. Includes evals, RAG, agents, fine-tuning, synthetic data generation, dataset management, MCP, and more. 项目地址: https://gitcod…

2026/10/15 2:23:20 阅读更多 →
WP-CLI 仓库开发与测试指南:从 AGENTS.md 到 Behat 行为驱动测试实战

WP-CLI 仓库开发与测试指南:从 AGENTS.md 到 Behat 行为驱动测试实战

CLI开发工具后端 【免费下载链接】wp-cli ⚙️ WP-CLI framework 项目地址: https://gitcode.com/gh_mirrors/wp/wp-cli 点击查看 免费下载 WP-CLI 是 WordPress 的官方命令行工具,本仓库(wp-cli/wp-cli)是其框架核心源码。本文以…

2026/10/15 2:23:20 阅读更多 →

最新新闻

笑脸与口罩识别的工业级落地:从像素统计到人机意图理解

笑脸与口罩识别的工业级落地:从像素统计到人机意图理解

1. 这不是玩具项目:笑脸与口罩识别背后的真实业务切口“笑脸识别,口罩识别”——光看标题,很多人第一反应是:这不就是个课堂Demo?调用OpenCV读个摄像头,加两行cv2.CascadeClassifier,再套个预训…

2026/10/15 3:08:36 阅读更多 →
2026,程序员的时代拐点到了

2026,程序员的时代拐点到了

1. 引言 2026 年,注定是程序员职业生涯中一个无法回避的坐标点。这一年,AI 编程助手从「玩具」变成了「同事」,大模型从「聊天机器人」变成了「需求分析师」,而程序员这个职业本身,也站在了前所未有的十字路口。有人焦…

2026/10/15 3:08:36 阅读更多 →
TensorFlow Lite集成实战:从模型转换、量化到端侧推理加速

TensorFlow Lite集成实战:从模型转换、量化到端侧推理加速

到这里,前几章我们讲了模型怎么训、怎么调,该轮到最“落地”的一步了:TensorFlow Lite集成。这章我想用一次完整的实操视角,把从训练好的模型到真正跑在端侧设备上的全流程讲透——包括模型转换、量化、Delegate加速、端侧推理API…

2026/10/15 3:08:36 阅读更多 →
Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径

Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径

Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径 【免费下载链接】Rope GUI-focused roop 项目地址: https://gitcode.com/GitHub_Trending/ro/Rope Rope 是一款免费的图形化人脸交换工具,基于 insightface 的 inswapper_128&#xff08…

2026/10/15 3:08:36 阅读更多 →
金蝶Cloud销售模块参数配置全攻略:从流程打通到信用风控

金蝶Cloud销售模块参数配置全攻略:从流程打通到信用风控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:08:36 阅读更多 →
免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下

免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下

免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock 很多…

2026/10/15 3:07:36 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →