是否可以在 Windows 中从 PHP 5 启用 VT100/ANSI 转义码

2024-02-26

我正在将旧的 PHP 5 应用程序升级到 PHP 7。我使用 Codeception 进行单元测试,因为它具有漂亮的颜色输出,可以轻松查看所有测试是否已通过。

我尝试过的事情:

  • 升级到 PHP 7:应用程序崩溃
  • 在没有特殊标志的情况下运行 Codeception:ANSI 转义码被打印到屏幕上,使得输出难以阅读
  • 使用以下命令运行 C​​odeception--no-colors标志:输出是单色,需要更长的时间才能识别 100% 通过的运行,或者哪些测试失败了
  • 使用 ANSICON 而不是 Windows 命令提示符:PHP 5 运行速度极其缓慢,需要一个小时才能生成包含覆盖范围的报告,而在命令提示符下运行相同的操作只需要 2 分钟

我没有尝试过的事情:

  • 设置注册表值,以便 ANSI 转义码始终打开,除非被正在运行的程序关闭:此解决方案不可移植到其他开发人员

我想要执行与下面列出的源代码相同的操作,但在 PHP 内除外。就像是:

if (is_windows_console()) {
  if (has_vt100_extensions()) {
    if (are_vt100_extensions_disabled()) {
      vt100_extensions->on();
    }
  }
}

我不知道是否可以从 PHP 内部向命令提示符 API 发出命令。

以下C代码来自PHP 7 源代码 https://github.com/php/php-src/commit/33301d5bae4964f74fd1fc8c4fc485abfde0378e#diff-7bf2a3854a43584d8930739e4b1b93ab:

PHP_WINUTIL_API BOOL php_win32_console_fileno_set_vt100(zend_long fileno, BOOL enable)
{
    BOOL result = FALSE;
    HANDLE handle = (HANDLE) _get_osfhandle(fileno);

    if (handle != INVALID_HANDLE_VALUE) {
        DWORD events;

        if (fileno != 0 && !GetNumberOfConsoleInputEvents(handle, &events)) {
            // Not STDIN
            DWORD mode;

            if (GetConsoleMode(handle, &mode)) {
                DWORD newMode;

                if (enable) {
                    newMode = mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
                }
                else {
                    newMode = mode & ~ENABLE_VIRTUAL_TERMINAL_PROCESSING;
                }
                if (newMode == mode) {
                    result = TRUE;
                }
                else {
                    if (SetConsoleMode(handle, newMode)) {
                        result = TRUE;
                    }
                }
            }
        }
    }
    return result;
}

有没有办法在 PHP 5 脚本中模拟此功能?

我发现了以下相关问题,但我仍然没有接近开始:

  • 如何从 PHP 调用 winapi 函数? https://stackoverflow.com/questions/3155827/how-to-call-winapi-functions-from-php
  • 如何从 PHP 进行 Win32 API 调用? https://stackoverflow.com/questions/1411657/how-do-i-make-win32-api-calls-from-php
  • 如何创建 C# DLL 以在 PHP 中使用 https://stackoverflow.com/questions/7874544/how-to-create-c-sharp-dll-to-use-in-php

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 Windows 中从 PHP 5 启用 VT100/ANSI 转义码 的相关文章

  • PHP7构造函数类名

    我有一个 Laravel 4 2 应用程序 它可以与 PHP5 一起使用 没有任何问题 由于我安装了一个运行 PHP7 的新 vagrant box 一旦我运行一个模型 其中函数名称与类名称 关系函数 相同 就会出现错误 如下所示
  • 如何在没有引用的情况下复制对象?

    PHP5 OOP 有据可查对象通过引用传递 http php net manual en language oop5 references php默认情况下 如果这是默认的 在我看来 有一种非默认的方式可以在没有参考的情况下进行复制 如何
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • mysqli bind_param 中的 NULL 是什么类型?

    我正在尝试将参数绑定到 INSERT INTO MySQLi 准备好的语句 如果该变量存在 否则插入 null 然后我知道 type variable i corresponding variable has type integer d
  • 检查文件权限

    我怎样才能检查file permissions 无需通过运行操作系统特定命令passthru or exec Use 文件权限 http php net fileperms功能 clearstatcache echo substr spri
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩
  • PHP - 扩展 __construct

    我想知道你是否可以帮助我 我有两个类 一个扩展了另一个 B 类将由各种不同的对象扩展 并用于常见的数据库交互 现在我希望 B 类能够处理其连接和断开连接 而无需来自 A 类或任何外部输入的指示 据我了解 问题是扩展类不会自动运行其 cons
  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • 创建 Facebook 测试用户时访问令牌出现问题

    我正在尝试为我的 Facebook 应用程序创建测试用户 他们在 11 月份的博客文章 http developers facebook com blog post 429 中宣布了此功能 并在此处记录了该功能 http developer
  • 尝试获取 Google accessToken

    看起来 无论我做什么 谷歌都在竭尽全力阻止我完成这个研究项目 我的项目让我使用 Google 电子表格作为数据库 并使用所述电子表格中的数据执行程序化的 Google 图片搜索 并向最终用户显示一些结果 设置说明 我开始按照此处的说明进行操
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • Yii2 中 init() 和 __construct() 方法有什么区别

    init 方法 public function init construct method public function construct 那么 它们之间有什么区别 应该使用哪一个呢 init 是从以下对象扩展的任何对象的方法yii b
  • 如何解决 Laravel 8 UI 分页问题?

    我在尝试最近发布的 laravel 8 时遇到了问题 我试图找出变化是什么以及它是如何工作的 当我这样做时 我遇到了分页 laravel 8 UI 变得混乱的问题 不知何故它发生了 有人可以帮助我吗 或者经历过同样的事情 像这样我在 lar
  • 如何让Gmail像加载进度条一样

    我想在页面的中心和顶部创建一个像 Gmail 一样的加载进度条 并适用于所有浏览器 这是基本代码
  • CSS 无法从带有 php“includes”的相对路径工作

    文件夹结构 index php includes header html css style css 我的主项目文件夹中有 2 个子文件夹 一个是名为 includes 的文件夹 另一个名为 css 我有我的 index php主文件夹中的
  • phpinfo 说 php.ini 路径是 C:\Windows 但那里没有 php.ini

    我们正在尝试从 PHP5 切换到 PHP7 现在我们已经安装了 Apache 并且 PHP 可以运行了 然而 我们在php ini文件没有任何作用 Via phpinfo 我们意识到原因是Configuration File php ini
  • 简单的dom php解析获取自定义数据属性值

    HTML div class something ddsf PHP foreach dom gt find something data rel as this var dump this gt attr 我尝试了这个但错误 在其文档中找不
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • Doctrine DQL 从 join 返回平面数组

    我通过 DQL 中的常规 LEFT JOIN 选择 3 个实体 它们通过连接表关联 连接表还定义了实体以及带注释的关系 查询执行没有问题 但我的结果作为平面数组返回 我期望一个包含三个实体作为每个索引的数组元素的数组 SELECT e1 e
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时

随机推荐

  • 测试元素的类型 python tuple/list

    如何验证列表或元组中所有元素的类型是否相同并且属于某种类型 例如 1 2 3 test for all int True 1 3 a test for all int False all isinstance n int for n in
  • 日期输入的 onchange [重复]

    这个问题在这里已经有答案了 可能的重复 当 的值发生更改时 会触发哪些事件 https stackoverflow com questions 3940258 what events does an input type number fi
  • 从 grails 项目执行甘特脚本

    我已经编写了自己的甘特脚本 它可以在命令行中正常工作 现在我需要从 grails 项目运行这个脚本 如下所示 def outputMessage try GroovyScriptEngine engine new GroovyScriptE
  • 如何使用 TFS REST API 获取迭代剩余天数

    我目前正在使用REST API version 2 0并连接到我的 TFS 实例PowerShell 我可以得到以下信息 迭代ID迭代名称队员团队成员每天的容量 使用下面的示例 GET https instance DefaultColle
  • 在 C# 中扩展枚举

    在java中 我习惯于扩展枚举值或重写方法 如下所示 enum SomeEnum option1 sv public String toString return Some value option2 private String Pass
  • Scala:我可以依赖集合中项目的顺序吗?

    这是一个相当不愉快的意外 scala gt Set 1 2 3 4 5 res18 scala collection immutable Set Int Set 4 5 1 2 3 scala gt Set 1 2 3 4 5 toList
  • Firebase 控制台中出现“您的操作被禁止”问题

    我创建了一个 Android 项目 现在我想将 Firebase 添加到我的 Android 项目中 我在 firebase 控制台上注册我的应用程序 现在 当我尝试将 sha 1 密钥添加到项目中时 出现以下错误 我在谷歌和 stacko
  • Reactjs - 必须返回有效的 React 元素(或 null)

    我有以下简单的代码 var data email email protected cdn cgi l email protection email email protected cdn cgi l email protection var
  • 对特定类的通用约束,为什么? [复制]

    这个问题在这里已经有答案了 我一直在阅读有关利用泛型约束的内容 我发现泛型可以被限制为struct class new Class and Interface 前三个背后的原因非常明显 但我实在无法理解why and when约束到一个类
  • javascript中当数组键包含字符串时删除数组键

    我在 javascript 中有一个数组 如下所示 arr md51234 md55234 我试图通过执行以下操作从中删除一个项目 delete arr md51234 但这似乎不起作用 还有其他方法可以删除这个吗 dystroy 提供了答
  • Java 日期和时间 API 有什么问题? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常遇到关于 Java 的负面反馈Date以及其他与日期时间相关的课程 作为一名 NET 开发人员 我无法完全 没有使用过它们 理解它们到底出
  • jQuery.Deferred 异常:$(...).datepicker 不是函数

    提前致谢 我已经搜索并实施了 document ready function ui datepicker datepicker and function if Modernizr inputtypes date input type dat
  • 如何在Netty中使用多个ServerBootstrap对象

    我正在尝试使用 Netty 4 0 24 在一个应用程序 一个主要方法 中创建多个服务器 多个 ServerBootstrap 我看到了这个问题 答案 但它留下了许多未解答的问题 Netty 4 0多端口 每个端口有不同的协议 https
  • 如何在ejb 3.0中实现缓存?

    我有一位客户陷入 EJB 3 0 环境中 没有 Singleton 没有bean管理的并发 考虑到ejb规范禁止线程管理和同步 如何实现缓存 本质上 我想要一个非同步对象缓存来执行一些昂贵的操作 EJB 3 0 规范第 21 1 2 章中规
  • 使用 Angular 14 在运行时动态导入模块

    我试图在 Angular 14 中动态导入模块 其中模块路径是在运行时设置的 但出现以下错误 Error Cannot find module src app plugin1 plugin1 module Github 重现 https g
  • 字符指针和整数指针 (++)

    我有两个指点 char str1 int str2 如果我查看两个指针的大小 我们假设 str1 4 bytes str2 4 bytes str1 将增加 1 个字节 但如果 str2 将增加 4 个字节 这背后的理念是什么 很简单 在提
  • System.Drawing.Bitmap 和 System.Windows.Media.Imaging.WriteableBitmap 之间的区别

    2者有什么区别 一些例子会很棒 没有System Drawing Bitmap在银光中 如果您要求在 NET 框架和WritableBitmap在 Silverlight 中 差异是巨大的 这WritableBitmap是位图的简单表示 具
  • Swift Codable:如何将顶级数据编码到嵌套容器中

    我的应用程序使用返回 JSON 的服务器 如下所示 result OK data Common to all URLs user name John Smith ETC Different for each URL data for thi
  • 通过 java 发送电子邮件超出每日发送配额

    我有一个java应用程序通过我的gmail帐户发送电子邮件 今天突然发现这个例外 我猜是我的 Gmail 被屏蔽了 那么解决这个问题的办法是什么呢 com sun mail smtp SMTPSendFailedException 550
  • 是否可以在 Windows 中从 PHP 5 启用 VT100/ANSI 转义码

    我正在将旧的 PHP 5 应用程序升级到 PHP 7 我使用 Codeception 进行单元测试 因为它具有漂亮的颜色输出 可以轻松查看所有测试是否已通过 我尝试过的事情 升级到 PHP 7 应用程序崩溃 在没有特殊标志的情况下运行 Co