Estos ejercicios permiten comprobar que se ha configurado correctamente el intérprete de PHP.
Para facilitar la realización de los ejercicios, se proporcionan unas plantillas de los ejercicios Visual Studio Code (Puesta en marcha).
En las primeras versiones de PHP, los fragmentos de código PHP se delimitaban con las etiquetas <? y > (sin interrogante en la etiqueta de cierre). A partir de PHP 3.0, publicado en 1998, la etiqueta de cierre incluye siempre el interrogante (?>) y la etiqueta de apertura incluye la palabra php (<?php). Los fragmentos de PHP se podían todavía delimitar con las etiquetas <? y ?>, pero se recomendaba utilizar las etiquetas <?php y ?>., compatibles con XML.
Aunque desde 1998 la etiqueta <? (llamada por motivos obvios short open tag) está desaconsejada, para mantener la compatibilidad con antiguos programas la directiva short_open_tag permite todavía utilizarla. En 2019 se rechazó la propuesta de eliminar completamente la etiqueta corta eliminando la directiva.
En este ejercicio se comprueba el funcionamiento de esta directiva.
; https://php.net/short-open-tag
short_open_tag=Off
Si la dirección no contiene el alias /iaw/php, revise la tarea creada en Visual Studio Code, como se explica en la lección Configuración de Visual Studio Code.
Hola
<p>Hola</p>
Este es el comportamiento esperado al abrir una página PHP: el navegador recibe únicamente HTML y este HTML es el resultado de la ejecución del programa PHP en el servidor. El programa PHP se ha ejecutado en el servidor porque el servidor ha reconocido la etiqueta de apertura <?php en el programa.
Hola
";
<?
// El código fuente de un programa no debería verse en el navegador
// porque al navegador se le envía la salida del programa
// normalmente generada por instrucciones print.
// Si se ve el código fuente del programa quiere decir que el
// programa no se ha ejecutado en el servidor.
print "<p>Hola</p>";
Este comportamiento es incorrecto: el navegador está recibiendo el programa PHP, no el resultado de su ejecución. Como el navegador no es capaz de ejecutar el programa PHP, el navegador hace lo que puede y muestra las partes que pueden interpretarse como HTML (en este caso, el párrafo y las comillas y punto y coma final). El programa PHP no se ha ejecutado en el servidor porque el servidor no ha reconocido la etiqueta de apertura <? en el programa. Todo lo que el servidor no reconoce como programa se envía tal cual al navegador.
; https://php.net/short-open-tag
; 2025-10-16. Modifico temporalmente el valor de la directiva para hacer pruebas
short_open_tag=On
Hola
<p>Hola</p>
Este es el comportamiento esperado al abrir una página PHP: el navegador recibe únicamente HTML y este HTML es el resultado de la ejecución del programa PHP en el servidor. El programa PHP se ha ejecutado en el servidor porque el servidor ha reconocido la etiqueta de apertura <?php en el programa.
Hola
<p>Hola</p>
Este es el comportamiento esperado al abrir una página PHP: el navegador recibe únicamente HTML y este HTML es el resultado de la ejecución del programa PHP en el servidor. El programa PHP se ha ejecutado en el servidor porque el servidor ha reconocido la etiqueta de apertura <? en el programa.
; https://php.net/short-open-tag
short_open_tag=Off
Aunque el valor On en la directiva short_open_tag hace que todos los programas, tanto los que utilizan la etiqueta <? como la etiqueta <?php, se ejecuten, el valor recomendado de la directiva short_open_tag es Off. El motivo es que nunca se debe utilizar la etiqueta corta <? y la mejor manera de darse cuenta si se ha utilizado por error es que los programas no funcionen.
Para evitar cometer el error, en el perfil recomendado en estos apuntes, PHP CS Fixer está configurado para corregir la etiqueta corta <? y convertirla automáticamente en la larga <?php.
<?php
function siguiente($a = 1, $b) { return $a + $b; }
Si no se muestra el error, revise la directiva error_reporting en php.ini, como se explica en la lección Configuración de Apache y PHP.
Esta es la página 2.
Warning: Cannot modify header information - headers already sent by (output started at php-3-2.php:1) in php-3-2.php on line 4Si ve esta página es que SÍ tiene la configuración de la directiva output_buffering en php.ini recomendada en estos apuntes para desarrollo.
Debe ver un aviso Warning tras el primer párrafo de esta página.
Si en su lugar se muestra la página php-3-3.php, revise la directiva output_buffering en php.ini, como se explica en la lección Configuración de Apache y PHP.
La página php-3-2.php escribe primero un párrafo de html y después intenta hacer una redirección. Las redirecciones se deben hacer antes de generar html, como se explica en la lección Cabeceras: la función header().
Si el servidor tiene buffer de salida, la redirección se puede generar porque el servidor todavía no ha enviado ese primer párrafo (ni las cabeceras de la página) al cliente. Pero si el servidor no tiene buffer de salida, el primer párrafo (y las cabeceras de la página) se envían inmediatamente por lo que al intentar generar la redirección se produce un error y no se realiza la redirección.
En conclusión, para darnos cuenta de que nos hemos equivocado generando redirecciones después de generar HTML, es conveniente configurar el buffer de salida a 0 bytes, para que esas redirecciones fallen y seamos conscientes de que debemos corregir el error.
Esta es la página 2.
Si no cambia el juego de caracteres de esta página, verá esta página aunque tenga la configuración recomendada en estos apuntes para desarrollo.
Debe ver un aviso Warning al principio de esta página.
Si en su lugar se muestra la página php-4-3.php, revise la directiva output_buffering en php.ini, como se explica en la lección Configuración de Apache y PHP.
La página php-4-2.php intenta hacer una redirección justo al principio de la página. Si el buffer de salida es de 0 bytes (la configuración recomendada en este curso), la redirección debería hacerse. El problema es que la página está guardada en el juego de caracteres UTF-8 con BOM, que contiene caracteres no visibles al principio del archivo (como se explica en la lección Cabeceras: la función header()). Si el servidor tiene buffer de salida, la redirección se puede generar porque el servidor todavía no ha enviado esos caracteres al cliente. Pero si el servidor no tiene buffer de salida, esos caracteres se envían antes de generar la redirección por lo que al intentar generar la redirección se produce un error y no se realiza la redirección.
En conclusión, para que los programas con redirecciones (o en general, que generen cabeceras) no fallen cuando el buffer de salida está configurado a 0 bytes, debemos asegurarnos de no usar el juego de caracteres UTF-8 con BOM.
Confirme que las directivas modificadas a lo largo de estos ejercicios contienen los valores recomendados:
; https://php.net/short-open-tag
short_open_tag=Off
; https://php.net/error-reporting
; 2025-10-16. Barto. He cambiado error_reporting para mostrar todos los errores
; error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting=E_ALL
; https://php.net/output-buffering
; 2025-10-16. Barto. Desactivo output_buffering
; output_buffering=4096
output_buffering=0