10 abril 2009

Errores de programación, segunda temporada, capítulo 2

Pues nada, un error de los que a mí me gustan, de esos que te hacen perder un tiempo delante del ordenador que estaría mejor aprovechado haciendo algo más agradable (nótese el tonillo irónico en "gustan" :-D). Esta vez, es con PhP.

Dice la teoría que tanto la función "header" de php, que redirige la ejecución del código a otra página, como la función "session_start()" sólo pueden utilizarse antes de que se envíe cualquier información a la pantalla dentro del archivo php en que se ubiquen. Así, no puedo llamar a "echo", o incluir código HTML antes de llamar a cualquiera de ambas funciones. Ello se debe a que en el protocolo HTTP, las cabeceras son lo primero que se envía, y ambas funciones envían información en las cabeceras del mencionado protocolo. Vale.

Incluyo ambas funciones en un archivo en PhP, miro cuidadosamente el código para asegurarme de que no envío nada delante, cosa que es correcta. Y... como el lector ya adivinará, falla. Ni idea de por qué. Me dedico a hacer pruebas y pruebas, y a perder un tiempo que podría haber empleado en salir de casa, en leer un libro o, por qué no, en jugar a algo (que mi nueva máquina y su supertarjeta gráfica se tragan ahora cualquier cosa). Por supuesto, todos los intentos infructuosos hasta que en una web perdida de Internet, gracias a buscar el error, al cuarto o quinto intento, leo algo tan misterioso como:

"A mí me funcionó quitando los espacios en blanco del archivo XXXXXX.php"

¿Espacios en blanco? Me da por revisar mi archivo PhP, y caigo en la cuenta de que la primera línea es "_< ?", donde _ es un espacio en blanco y < ? es cómo se le indica al servidor que, a partir de ahí, voy a ejecutar código php. ¿A que no sabéis lo que hice? Sí, exacto: borrar el espacio. Y funcionó perfectamente. Ni me había dado cuenta de que había un espacio ahí.

No hay comentarios: