Las etiquetas de cierre en PHP las carga el diablo

Hablé en un capítulo anterior sobre la conveniencia de no usar las etiquetas short tags en nuestros programas. Hoy voy a hablar de otro de los problemas que a todos nos ha causado más de un dolor de cabeza: las etiquetas de cierre.

Para saber de qué hablo prueba este código:

<?php
session_start();
?>

Si lo ejecutas todo irá como la seda. Pero vamos a probar una cosa; añade un espacio o un salto de línea delante de la etiqueta de apertura:

 <?php
session_start();
?>

Ahora empiezan los problemas:

 PHP Warning:  session_start(): Cannot send session cookie - headers already sent by (output started at /home/gorka/webs/etiquetas.php:1) in /home/gorka/webs/etiquetas.php on line 2
PHP Warning:  session_start(): Cannot send session cache limiter - headers already sent (output started at /home/gorka/webs/etiquetas.php:1) in /home/gorka/webs/etiquetas.php on line 2

Como puedes ver, ese simple espacio que hemos metido delante de la etiqueta de apertura nos está dando guerra.

Como es el primer carácter podemos detectarlo sin mayor problema. De hecho, cuando tienes algo de experiencia en programación casi hasta te hace daño a la vista.

Sin embargo, si ese espacio está al final del script no es tan fácil detectarlo. Por ejemplo:

<?php
session_start();
?> 



Este código tiene un espacio y tres saltos del línea al final pero es muy posible que ni te des cuenta. Claro está, que aquí no va a dar ningún problema, pero si hiciésemos:

<?php
include('config.php');
session_start();
?>

Y en el fichero config.php tuviésemos un espacio después del cierre:

<?
// bla, bla, bla
?> 


Aquí tendríamos el mismo problema pero ya no sería tan fácil de identificar.

¿Cómo evitar el problema con las etiquetas de cierre?

La solución es sencilla... ¡no pongas etiquetas de cierre!

Este es el método más seguro para asegurarnos de que no se nos cuela un maléfico espacio que no hará otra cosa que amargarnos la vida.

Así que si empiezas en PHP y te sorprende no ver etiquetas de cierre al final del código ya sabes por qué es. Otro ejemplo de que menos es más.

Este es otro de los motivos por los que los programadores de otros lenguajes desprecian y se ríen de los que trabajamos con PHP. Si sufres este tipo de acoso, tranquilo, te recomiendo paciencia... y cuando no miren escupe en su almuerzo :-D.

¿Sólo espacios o saltos de línea? ¿Y si es cualquier otro carácter?

Claro, el problema vamos a tenerlo con cualquier carácter que dejemos. Lo que sucede es que cualquier otro carácter lo podemos ver sin problemas pero los espacios no los vemos.

Otros problemas causados por los espacios después de las etiquetas de cierre

Aparte de los problemas con las sesiones hay una variedad de problemas relacionados:

  • Al aparecer caracteres “extra” puede que la descarga de un fichero falle.
  • Puede fallar una llamada AJAX.
  • Errores sin sentido o incluso segmentation faults en determinados servidores.
Autor:
Nivel: Principiante
Palabras clave:
Fecha publicado:
Fecha actualizado: 13-10-2016

Otros capítulos de la misma serie

Este capítulo es parte de la serie: Trucos PHP.

Y muchos más en preparación.

Disponible en los planes: Laravel hero PHP a tope