Frente al siguiente error que puede estar motivado por intentar ejecutar un script que llame al cmd (#!C:\WINDOWS\system32\cmd.exe)
1 2 3 4 5 6 7 8 9 10 11 |
¡Error del servidor! Se ha producido un error interno en el servidor y no se ha podido completar su solicitud. Mensaje de error: malformed header from script 'script.sh': Bad header: Microsoft Windows [Versión 10. Si usted cree que esto es un error del servidor, por favor comuníqueselo al administrador del portal. Error 500 localhost Apache/2.4.34 (Win32) OpenSSL/1.1.0h PHP/7.2.8 |
Una posible solución es crear un .exe utilizando C# en el que ejecutemos los comandos que necesitemos en PowerShell o cmd.
Pasos para compilar un código fuente en C#: https://www.jesusninoc.com/02/22/compilar-desde-la-linea-de-comandos-un-codigo-fuente-en-c-con-csc-exe/
Después llamamos al .exe desde el script
1 |
#!C:\xampp\htdocs\script\ejemplo.exe |
Otra posible solución:
Aquí te dejo un ejemplo de cómo puedes enviar una cabecera HTTP válida en un script CGI en Windows:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@echo off :: Ejecuta el comando cmd for /f "delims=" %%a in ('cmd') do set "result=%%a" :: Establece la cabecera HTTP echo Content-Type: text/plain echo Content-Length: %result:~0,-1% echo Status: 200 OK echo. :: Imprime la salida del comando cmd echo %result% |
Este ejemplo establece el tipo de contenido como «text/plain», la longitud de la cadena devuelta por el comando cmd y el código de estado HTTP como «200 OK». Luego, imprime la salida del comando cmd en el cuerpo de la respuesta HTTP.
Ten en cuenta que la cabecera HTTP debe ser la primera cosa que se imprime en el script CGI, y debe estar seguida por dos caracteres de nueva línea antes de imprimir cualquier contenido adicional en el cuerpo de la respuesta HTTP.