首页 > 解决方案 > 是否可以在 Windows 中启用 PHP 5 的 VT100/ANSI 转义码

问题描述

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

我尝试过的事情:

我没有尝试过的事情:

除了在 PHP 中,我想做与下面列出的源代码相同的操作。就像是:

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

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

以下 C 代码来自PHP 7 源代码

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 脚本中模拟此功能?

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

标签: phpwindows-10ansi-escapevt100

解决方案


推荐阅读