Primeras páginas en PHP

Estructura de una página PHP

Una página PHP es un archivo de texto que contiene uno o varios fragmentos de código PHP y que también puede contener fragmentos de código HTML.

Fragmentos PHP

Los fragmentos de código PHP están delimitados por las etiquetas <?php (etiqueta inicial) y ?> (etiqueta final) y contienen las instrucciones de PHP. Más adelante se comentan otros posibles delimitadores de fragmentos de código PHP.

<?php
print "<p>Hola</p>\n";
?>
<p>Hola</p>

Los fragmentos de PHP no pueden anidarse, es decir, no puede haber un fragmento dentro de otro:

Código incorrecto
<?php
print "<p>Hola</p>\n";

<?php
print "<p>Adios</p>\n";
?>
?>
Parse error: syntax error, unexpected '<' in ejemplo.php on line 4

Si en una misma página hay varios fragmentos PHP, se tratan como un único programa. Los siguientes programas son equivalentes:

<?php
$saludo = "Hola";         // Se define una variable
print "<p>$saludo</p>";   // Se escribe el valor de la variable
?>
<p>Hola</p>
<?php
$saludo = "Hola";             // Se define una variable
?>
<?php
print "<pre>$saludo<pre>";   // Se escribe el valor de la variable
?>
<p>Hola</p>

Si el programa termina con un fragmento PHP, ese último fragmento PHP no necesita cerrarse. Los siguientes programas son correctos:

<?php
print "<p>Hola</p>\n";
<p>Hola</p>
<?php
print "<p>Hola</p>\n";
?>
<?php
print "<p>Adios</p>\n";
<p>Hola</p>
<p>Adios</p>

Fragmentos PHP y fragmentos HTML

En una página PHP todo lo que no son fragmentos PHP son fragmentos HTML. Los fragmentos de código HTML no están delimitados por ninguna etiqueta.

<?php
print "<p>Hola</p>\n";
?>
<p>¿Cómo estás</p>
<p>Hola</p>
<p>¿Cómo estás</p>

Cuando un navegador solicita una página PHP a un servidor, el servidor lee el archivo secuencialmente y va generando el resultado:

Cuando el servidor termina de leer el archivo, el servidor envía al navegador el resultado.

Es importante señalar que:

Los ejemplos siguientes muestran diferentes programas PHP que generan el mismo resultado:


En un fragmento PHP no pueden escribirse etiquetas HTML sueltas; el código HTML debe generarse siempre con instrucciones de PHP. El programa siguiente no puede ni siquiera ejecutarse y produce un error de sintaxis:

Código incorrecto
<?php
<p>Hola</p>
?>
Parse error: syntax error, unexpected '<' in ejemplo.php on line 2

De la misma manera, no se deben escribir instrucciones de PHP fuera de fragmentos PHP. No se producen errores, pero el resultado no es el esperado. Como el texto fuera de fragmentos PHP se envía tal cual al navegador, el navegador recibirá las instrucciones de PHP, que el navegador no sabe ejecutar y se mostrarán en la pantalla.

Código incorrecto
<?php
print "<p>Hola</p>\n";
?>
<p>¿Cómo estás?</p>

print "<p>Adios</p>\n";
<p>Hola</p>
<p>¿Cómo estás?</p>

print "<p>Adios</p>\n";

El delimitador <? ... ?>

¡Atención!Nota: El delimitador <? ... ?> no se debe utilizar. Se comenta en esta lección porque todavía se puede encontrar en código escrito hace muchos años.

El delimitador <? se podía utilizar antiguamente como delimitador de bloques PHP, pero desde hace años se desaconseja completamente su uso porque provoca conflictos, entre otros, con la instrucción de procesamiento xml (<?xml) de los documentos XML. En su lugar, se debe utilizar el delimitador <?php .. ?>.

Mediante la directiva short_open_tag (etiqueta de apertura abreviada) se puede permitir el uso del delimitador <? además del delimitador <?php. Si la directiva short_open_tag tiene el valor On (lo que está desaconsejado), el siguiente programa no daría errores:

<?
print "<p>Hola</p>\n";
?>
<p>Hola</p> 

Pero si la directiva short_open_tag tiene el valor Off (valor recomendado), el mismo programa produciría un resultado incorrecto y que puede resultar chocante, ya que en el navegador se puede ver el programa original:

<?
print "<p>Hola</p>\n";
?>
<?
print "<p>Hola</p>\n";
?>

Este resultado se debe a que como el programa no contiene el delimitador <?php, su contenido no se reconoce como fragmento PHP. Como no se reconoce como fragmento PHP, el servidor lo envía tal cual al navegador, que no puede mostrarlo correctamente puesto que no es html correcto. Abriendo la vista de código fuente en el navegador, se podría ver mejor el programa completo.

El delimitador <?= ... ?>

El delimitador <?= es una abreviatura de la expresión <?php echo que se utiliza en muchos frameworks de PHP en los documentos que sirven de plantilla de generación de interfaces, sobre todo cuando estas plantillas las van a editar usuarios sin muchos conocimientos de programación (diseñadores gráficos, etc.).

<?php
$saludo = "Hola";
$despedida = "Adios";
?>
<p><?= $saludo ?></p>
<p><?= $despedida ?></p>
<p>Hola</p>
<p>Adios</p>

Antes de PHP 5.4, publicado en marzo de 2012, para poder usar este delimitador se necesitaba activar la directiva short_open_tag. El problema era que, como se comenta en el apartado anterior, desde hace años se aconseja no activar esa directiva para impedir el uso del delimitador <?. A partir de PHP 5.4 se ha resuelto este problema desvinculado el delimitador <?= de la directiva short_open_tag. por tanto, desde PHP 5.4, el delimitador <?= se puede utilizar sin limitaciones.

Comentarios en páginas PHP

En un fragmento PHP se pueden comentar líneas de código utilizando:

Estos comentarios no se añaden al código HTML generado por la página, por lo que no pueden verse en el navegador.

<p><strong>
<?php
// La instrucción print escribe texto en la página web
print "Hola"; // El comentario se puede escribir al final de la línea
?>
</strong></p>
<p><strong>Hola</strong></p>
<p><strong>
<?php
# La instrucción print escribe texto en la página web
print "Hola"; # El comentario se puede escribir al final de la línea
?>
</strong></p>
<p><strong>Hola</strong></p>
<?php
print "<p><strong>";
/* Dentro de un fragmento PHP no se pueden escribir
   etiquetas html sueltas, tienen que estar siempre
   incluidas en instrucciones print
*/
?>
Hola
<?php
print "</strong></p>";
?>
<p><strong>Hola</strong></p>

Si se quieren escribir comentarios en los fragmentos HTML, hay que utilizar la etiqueta de comentarios de HTML <!-- .... -->.

Estos comentarios, como todo el código HTML situado en los fragmentos HTML, se incluyen sin modificaciones en el resultado, por lo que pueden verse en el navegador.

<p>
<?php
print "Hola";
?>
</p>
<!-- El texto anterior ha sido generado por PHP -->
<p>Hola</p>
<!-- El texto anterior ha sido generado por PHP -->

Si se quieren escribir comentarios en las hojas de estilo CSS, hay que utilizar la etiqueta de comentarios de C /* .... */.

Estos comentarios, como todo el código CSS situado en las hojas de estilo, se incluyen sin modificaciones en el resultado, por lo que pueden verse en el navegador.

html {
  background-color: #FF0000; /* #FF000000 es rojo */
}
html {
  background-color: #FF0000; /* #FF000000 es rojo */
}

Código HTML de páginas HTML 5 (con sintaxis XHTML) válidas

Si queremos crear páginas HTML válidas debemos generar código HTML válido, es decir, generar todas las etiquetas HTML necesarias respetando las reglas sintácticas. En este curso se generarán páginas HTML 5 (siguiendo la sintaxis del XHTML 5), y se utilizará el juego de caracteres UTF-8.

El ejemplo siguiente muestra el código html de una página web HTML 5 válida con las líneas numeradas.

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="es">
  <head>
    <meta charset="utf-8" />
    <title>Página HTML 5 válida</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" type="text/css" href="estilo.css" />
  </head>

  <body>
    <p>Esta página es una página HTML 5 válida.</p>
  </body>
</html>

Generar el código HTML de páginas HTML 5 (con sintaxis XHTML) válidas

La página PHP debe incluir o generar todo el código HTML necesario. El ejemplo siguiente genera una página válida mediante un único fragmento PHP.

Nota: Dentro de la cadena todas las comillas están precedidas del carácter contrabarra (\), como se explica en la lección sobre cadenas.

<?php
print "<!DOCTYPE html>
<html lang=\"es\">
  <head>
    <meta charset=\"utf-8\" />
    <title>Página HTML 5 válida</title>
    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />
  </head>

  <body>
    <p>Esta página es una página HTML 5 válida.</p>
  </body>
</html>";
?>

En principio, el mismo código html podría generarse combinando fragmentos PHP y fragmentos HTML, como en el siguiente ejemplo con dos fragmentos PHP y tres fragmentos HTML:

Nota: El carácter especial \n incluido en los print es para generar un salto de línea en el código HTML, como se explica en la lección sobre cadenas.

<!DOCTYPE html>
<html lang="es">
  <head>
    <meta charset="utf-8" />
<?php
print "    <title>Página HTML 5 válida</title>\n";
?>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  </head>
<body>
<?php
print "    <p>Esta página es una página HTML 5 válida.</p>\n";
?>
  </body>
</html>

Enlaces a hojas de estilo

Una página PHP puede enlazar a una hoja de estilo CSS exactamente igual que una página HTML, es decir, enlazando a la hoja de estilo mediante la etiqueta <link>.

Los siguientes ejemplos muestran el enlace a la hoja de estilo incluido en un fragmento HTML o generado por un fragmento PHP:

<!DOCTYPE html>
<html lang="es">
  <head>
    <meta charset="utf-8" />
    <link rel="stylesheet" type="text/css" href="estilo.css" />
<?php
print "    <title>Página HTML 5 válida</title>\n";
?>
    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />
  </head>

  <body>
<?php
print "    <p>Esta página es una página HTML 5 válida.</p>\n";
?>
  </body>
</html>
<!DOCTYPE html>
<html lang="es">
  <head>
    <meta charset="utf-8" />
<?php
print "    <link rel=\"stylesheet\" type=\"text/css\" href=\"estilo.css\" />\n";
print "    <title>Página HTML 5 válida</title>\n";
?>
    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />
  </head>

  <body>
<?php
print "    <p>Esta página es una página HTML 5 válida.</p>\n";
?>
  </body>
</html>