我正在将旧的 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 源代码 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(使用前将#替换为@)