我正在将旧的 PHP 5 应用程序升级到 PHP 7。我正在使用 Codeception 进行单元测试,因为它具有漂亮的颜色输出,可以轻松查看所有测试是否通过。
我尝试过的事情:
- 升级到 PHP 7:应用程序崩溃
- 在没有特殊标志的情况下运行 Codeception:ANSI 转义码被打印到屏幕上,使得输出难以阅读
- 使用标志运行 Codeception
--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 源代码:
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 脚本中模拟此功能?
我发现了以下相关问题,但我还没有接近开始: