Perl y Apache

Saludos.
Tengo un problema con Perl y el servidor Apache que me trae por la
calle de la amargura. Espero que alguien me pueda ayudar; os lo
agradecería infinitamente.
El problema es el siguiente: he instalado el servidor Apache y va
sin problemas, es decir, "funciona", también he instalado el
interprete de Perl, que también funciona en modo de comandos. El
problema surge cuando quiero probar ese programa, que funciona con
el intérprete, con el servidor. Copio el fichero de perl en el
directorio "...\cgi-bin" del servidor Apache, ejecuto el servidor,
abro el navegador y pongo esto para ejecutar el fichero como si
estuviera en un servidor con esto: "http://localhost/cgi-bin/p1.pl"
Donde p2.pl es un fichero sumamente sencillo como es este (estoy
comenzando a aprender Perl):
-------------
#!c:\perl\bin\perl -T
$uno = 2;
$dos = 2;
$rdo = $uno + $dos;
print "$uno + $dos hacen : $rdo";
--------------
Y este es el error que me sale siempre:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
-----------------
Este es el error que se archiva en "error.log":
[Sat May 04 02:15:29 2002] [error] [client 127.0.0.1] couldn't spawn child process: c:/archivos de programa/apache group/apache/cgi-bin/p2.pl
o este otras veces:
[Sat May 04 02:19:28 2002] [error] [client 127.0.0.1] Premature end of script headers: c:/archivos de programa/apache group/apache/cgi-bin/p2.pl
----------------
He probado a invertir las barras del directorio por si no fuera correcto
pero nada.
A ver si alguien me puede ayudar. Muchísimas gracias.

1 Respuesta

Respuesta
1
Por lo que veo, la solución es simple.
Para llegar correctamente al navegador, todas los documentos que envía tu servidor necesitan un cabecera http que los describa.
En el caso de los documentos que sirve Apache directamente no hay problema: él mismo se ocupa de ponerles las cabeceras.
Pero cuando los documentos losa generas tú con un script, tienes que ponérselas tú, porque Apache no sabe qué tipo de documento es (puedes generar con un script tanto un documento HTMl cono una imagen GIF, por ejemplo).
De modo que, antes de escribir cualquier otra cosa, debes enviar una de estas cabeceras.
El modo más usual es poner lo siguiente:
print "Content-Tipe: text/html\n\n";
Con esto le estamos diciendo que lo siguiente que viene es un documento HTML (que será lo que mandes más a menudo) fíjate que hemos puesto DOS renornos de carro al final (entre la cabecera y el documento propiamente dicho ha de haber una línea en blanco) y que lo hemos puesto entre comillas dobles (para que perl interprete los \n como retornos de carro y no como texto).
Con esto, tu script quedará como sigue:
-----
#!c:\perl\bin\perl -T
$uno = 2;
$dos = 2;
$rdo = $uno + $dos;
print "Content-Tipe: text/html\n\n";
print "$uno + $dos hacen : $rdo";
------
Y esto ya debería funcionar.
Recuerda poner estas cabeceras en todos los scripts que vayan a funcionar como CGIs.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas