¿Por qué PHP 5.5 no produce colores ANSI en el símbolo del sistema de Windows 10? -- php campo con windows-10 campo con command-prompt campo con php-5.5 campo con ansi-escape camp Relacionados El problema

Why does PHP 5.5 not produce ANSI colours in the Windows 10 Command Prompt?


1
vote

problema

Español

Tengo que usar una versión antigua de PHP mientras actualiza una aplicación de producción a una versión moderna. Mi máquina de desarrollo de Windows 10 tiene PHP 7.3 en él, pero la aplicación anterior necesita PHP 5.5.

Mis salidas de marcos de prueba en color que es realmente útil para detectar rápidamente si alguna prueba falla. Sin embargo, con PHP 5.5, los mensajes de salida se interconectan con el código ANSI que los hacen muy difíciles de leer.

PHP 7.3 puede representar texto a la consola con los colores ANSI, pero el mismo código en PHP 5.5 produce las secuencias ANSI en la salida en lugar de configurar los colores. Si uso Ansicon en lugar del símbolo del sistema incorporado, tanto PHP 5.5 como AMP; PHP 7.3 puede generar en color.

¿Por qué es la única combinación que no se muestra en color PHP 5.5 + el símbolo del sistema?

Imagen del sistema

Preguntor de comandos ANSI falla PHP 5.5

  C:>php55 -r "echo """x1B[36mCyanx1B[0m""";" [36mCyan[0m C:>php73 -r "echo """x1B[36mCyanx1B[0m""";" Cyan   

Consola ANSI

ansicon ansi éxito php 5.5

  C:>php55 -r "echo """x1B[36mCyanx1B[0m""";" Cyan C:>php73 -r "echo """x1B[36mCyanx1B[0m""";" Cyan   
Original en ingles

I have to use an old version of PHP while updating a production application to a modern version. My Windows 10 development machine has PHP 7.3 on it, but the old application needs PHP 5.5.

My testing framework outputs in colour which is really helpful for quickly detecting if any tests fail. However, with PHP 5.5, the output messages are interleaved with the ANSI code making them very hard to read.

PHP 7.3 can render text to the console using ANSI colours, but the same code in PHP 5.5 produces the ANSI sequences in the output instead of setting the colours. If I use ANSICON instead of the built-in command prompt, both PHP 5.5 & PHP 7.3 can output in colour.

Why is the only combination that fails to display in colour PHP 5.5 + the Command Prompt?

Command Prompt

Command Prompt ANSI failure PHP 5.5

C:\>php55 -r "echo """\x1B[36mCyan\x1B[0m""";" [36mCyan[0m C:\>php73 -r "echo """\x1B[36mCyan\x1B[0m""";" Cyan 

ANSI Console

ANSICON ANSI success PHP 5.5

C:\>php55 -r "echo """\x1B[36mCyan\x1B[0m""";" Cyan C:\>php73 -r "echo """\x1B[36mCyan\x1B[0m""";" Cyan 
              

Lista de respuestas

1
 
vote

La consola de Windows es históricamente muy diferente de los terminales en los OSEs basados ​​en UNIX, como se discutió en esta interesante serie de blogposts .

En los sistemas similares a los Unix, los programas de línea de comandos generalmente no son conscientes del terminal o la consola que están conectados, simplemente reciben información de entrada y escritura en los descriptores especiales de archivos. Para colocar el cursor, o renderizar efectos, como texto de color, escriben secuencias especiales que esperan que el terminal interpretará correctamente.

En Windows, se espera que el programa esté al tanto de la consola, y use una API especial para tareas, como posicionar el cursor y la representación de los efectos de texto.

Sin embargo, las versiones recientes de Windows pueden interpretar secuencias especiales según el conjunto de control "VT100" común, pero solo lo hará si se emite una llamada API para habilitar la función . Consulte Documentación en la característica . Esta llamada de API fue Agregado a Windows Builds of PHP DURANTE 7.2 Ciclo de desarrollo, por lo que las versiones anteriores no encienden el manejo especial.

Las aplicaciones alternativas de la consola / terminal están disponibles para Windows que funcionan más como sus contrapartes de UNIX de forma predeterminada, por lo que PHP no necesita hacer nada especial para habilitar el procesamiento de secuencias de escape.

 

The Windows console is historically very different from terminals on Unix-based OSes, as discussed in this interesting series of blogposts.

On Unix-like systems, command-line programs are not generally aware of the terminal or console they're attached to, they just receive input and write output on special file descriptors. To position the cursor, or render effects such as coloured text, they write special sequences which they hope the terminal will interpret correctly.

On Windows, the program is expected to be aware of the console itself, and use a special API for tasks such as positioning the cursor and rendering text effects.

However, recent versions of Windows can interpret special sequences based on the common "VT100" control set, but will only do so if an API call is issued to enable the feature. See documentation on the feature. This API call was added to Windows builds of PHP during the 7.2 development cycle, so older versions will not turn on the special handling.

Alternative console / terminal applications are available for Windows which work more like their Unix counterparts by default, so PHP doesn't need to do anything special to enable escape sequence processing.

 
 
 
 

Relacionados problema

4  Regex que coinciden con los códigos de escape ANSI [CERRADO]  ( Regex matching ansi escape codes ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...

0  Diferente valor JSON.Stringify en IE8 con caracteres UTF-8  ( Different value json stringify on ie8 with utf 8 characters ) 
Mi sitio web está utilizando la función JSON.Strigify () para hacer datos de JSON. Pero obtengo resultados diferentes entre los navegadores con los caracter...

4  Edición de archivos de color ANSI  ( Ansi coloured file editing ) 
contexto Tener algunos archivos de transcripción de la interacción del terminal, obtenidos utilizando el comando tradicional UNIX "Script". Esas transcrip...

5  ¿Análisis de códigos de escape ANSI?  ( Parsing ansi escape codes ) 
Estoy construyendo una aplicación Telnet en C # (para los juegos de puerta de scripting en los sistemas Oldschool BBS, por ejemplo, Wildcat) y parece que no p...

1  ¿Por qué los códigos de escape ANSI a veces funcionan en CMD?  ( Why do ansi escape codes sometimes work in cmd ) 
Los códigos de escape ANSI no funcionan de forma predeterminada en CMD. Pero sin embargo, alguna aplicación hace algún tipo de inicialización después de lo ...

546  ¿Qué son el retorno de carruaje, la línea de línea y la alimentación de formulario?  ( What are carriage return linefeed and form feed ) 
¿Cuál es el significado de los siguientes caracteres de control: retorno de carro feed line Formato de alimentación ...

1  Determine la posición del cursor terminal con una secuencia ANSI en Python 3  ( Determine the terminal cursor position with an ansi sequence in python 3 ) 
Quiero escribir un poco de script que imprime imágenes en el terminal con /usr/lib/w3mimgdisplay (como en Mac OSX lsi ). Por lo tanto, necesito la posición...

7  Conversión de secuencias de escape ANSI a HTML usando PHP  ( Converting ansi escape sequences to html using php ) 
Esta es una pregunta similar a este . Me gustaría convertir las secuencias de escape ANSI, especialmente para color, en HTML. Sin embargo, me gustaría lograr...

10  Leyendo el informe del estado del dispositivo ANSI Escape Secuencia Respuesta  ( Reading the device status report ansi escape sequence reply ) 
Estoy tratando de recuperar las coordenadas del cursor en un terminal VT100 utilizando el siguiente código: void getCursor(int* x, int* y) { printf("33[...

2  ¿Hay un widget WX para mostrar el texto de color de escape ANSI?  ( Is there a wx widget to show ansi escape code colored text ) 
Parece que no puedo encontrar un control que muestre el texto de color con los códigos de escape ANSI. Por ejemplo: R2 mostraría un verde "hola" y un "m...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos