Un archivo .php puede tener HTML normal y bloques de PHP intercalados. PHP ejecuta lo que está dentro de los bloques y deja pasar todo lo demás sin tocarlo. Esta página enseña a abrir y cerrar esos bloques y a imprimir con echo.

Las etiquetas de PHP

Anatomía de un bloque PHP

 <?php echo "Hola"; ?>
   ^    ^     ^   ^ ^
   |    |     |   | `-- cierre del bloque
   |    |     |   `-- punto y coma: termina la instrucción
   |    |     `-- el valor que se imprime (un texto)
   |    `-- la instrucción
   `-- apertura del bloque

Todo lo que está entre <?php y ?> es código. Lo que está fuera de esas etiquetas se envía tal cual al navegador.

<h1>Mi sitio</h1>
<p><?php echo "Este párrafo lo escribió PHP"; ?></p>
<p>Este otro es HTML normal.</p>

Lo que recibe el navegador:

<h1>Mi sitio</h1>
<p>Este párrafo lo escribió PHP</p>
<p>Este otro es HTML normal.</p>

PHP lee de arriba hacia abajo, como el navegador

No hay función main como en C. PHP empieza en la primera línea del archivo y termina en la última: el HTML de afuera y los echo de adentro van saliendo en el mismo orden en que están escritos.

echo: imprimir

echo escribe un texto en la salida. En la terminal aparece en pantalla; en el navegador pasa a ser parte del HTML.

<?php
echo "Primera línea\n";
echo 'Segunda línea' . "\n";
echo "Uno, ", "dos, ", "tres\n";
echo 42;
echo "\n";
Primera línea
Segunda línea
Uno, dos, tres
42
  • El texto va entre comillas, dobles "…" o simples '…' (la diferencia se ve en Cadenas de texto).
  • Los números se imprimen sin comillas.
  • \n es un salto de línea en la terminal. El punto . une textos.

print hace lo mismo que echo pero acepta un solo valor. En el curso usaremos siempre echo.

echo puede imprimir HTML

Como lo que imprimes termina en el navegador, puedes imprimir etiquetas:

<?php
echo "<h2>Novedades</h2>";
echo "<p>Hoy se publicó la <strong>Parte 1</strong> de PHP.</p>";

Incorrecto: un echo gigante con todo el HTML

<?php
echo "<!DOCTYPE html><html><head><title>Inicio</title></head><body><nav><a href='index.php'>Inicio</a></nav><h1>Hola</h1></body></html>";

Funciona, pero es ilegible, VSCode no te ayuda con las etiquetas y un error de comillas rompe toda la página.

Correcto: HTML como HTML, y PHP solo donde cambia algo

<!DOCTYPE html>
<html lang="es">
<head>
  <title>Inicio</title>
</head>
<body>
  <h1>Hola</h1>
  <p>Hoy es <?php echo date("d/m/Y"); ?></p>
</body>
</html>

El archivo sigue siendo HTML legible. PHP aparece solo en la parte que es distinta en cada visita: la fecha.

La etiqueta corta <?= ?>

Imprimir un valor dentro del HTML es tan común que tiene su propia etiqueta: <?= valor ?> es lo mismo que <?php echo valor; ?>.

<footer>
  <p>© <?= date("Y") ?> · Mi sitio</p>
</footer>
<footer>
  <p>© 2026 · Mi sitio</p>
</footer>
EscribesEquivale aÚsala para
<?php … ?>Un bloque de códigoInstrucciones: cálculos, decisiones, ciclos
<?= $x ?><?php echo $x; ?>Imprimir un valor dentro del HTML

La etiqueta corta no lleva punto y coma

<?= date("Y") ?> ya es una instrucción completa. Se lo puedes poner, pero no hace falta.

El punto y coma

Igual que en C, cada instrucción termina en ;. Es la causa más común del primer error que vas a ver.

Incorrecto: olvidar el punto y coma

<?php
echo "Hola"
echo "Chao";
PHP Parse error:  syntax error, unexpected token "echo", expecting "," or ";" in /home/ana/hola.php on line 3

Fíjate en que el error dice línea 3, pero el ; falta en la línea 2. PHP se da cuenta recién cuando encuentra el siguiente echo.

Correcto

<?php
echo "Hola";
echo "Chao";

Cuando el error dice "unexpected", mira la línea anterior

Un ;, una comilla o una llave que falta se descubre en la línea siguiente. Si la línea que indica el error se ve bien, revisa la de arriba.

Comentarios

Texto que PHP ignora. Sirven para explicar el porqué de algo, no para repetir lo que ya dice el código.

<?php
// Comentario de una línea
# También de una línea (menos usado)
 
/*
  Comentario de
  varias líneas
*/
 
echo "Hola"; // también al final de una línea

Incorrecto: comentario de HTML para esconder PHP

<!-- <?php echo "secreto"; ?> -->

El comentario de HTML no detiene a PHP: el echo se ejecuta igual y secreto llega al navegador, visible en el código fuente.

Correcto: comentario de PHP dentro del bloque

<?php // echo "secreto"; ?>

PHP no ejecuta la línea y no envía nada.

¿Cerrar o no cerrar con ?>?

El archivo…¿Lleva ?> al final?
Mezcla PHP y HTML (una vista: index.php)Sí, cada bloque se cierra antes de volver al HTML
Es solo PHP (por ejemplo, los datos: datos.php)No. Se deja abierto hasta el final del archivo

Correcto: archivo solo PHP, sin cierre

<?php
// datos.php
$sitio = "Mi sitio";
$anio = 2026;

Si cierras con ?> y después queda un espacio o una línea en blanco, ese espacio se envía al navegador en cada página que incluya el archivo, aunque no lo hayas escrito en ninguna vista. Sin ?>, el problema no existe.

Pruébalo

  • Crea fecha.php con un <h1> en HTML y un párrafo que imprima la fecha con <?= date("d/m/Y") ?>
  • Ábrelo con php -S y mira el código fuente: la fecha aparece escrita, sin PHP
  • Ejecuta el mismo archivo con php fecha.php: verás el HTML como texto en la terminal
  • Error provocado: borra un ; y lee el número de línea del error
  • Error provocado: pon un echo dentro de <!-- --> y búscalo en el código fuente

Errores comunes

SíntomaCausaSolución
syntax error, unexpected token "echo"Falta el ; de la instrucción anteriorRevisa el final de la línea de arriba
syntax error, unexpected end of fileQuedó una comilla o una llave sin cerrarBusca la comilla de apertura que no tiene pareja
Se ve <?php en pantallaLa etiqueta está mal escrita (<? php, <php) o el archivo no pasó por PHPEscribe <?php junto, sin espacios, y abre con php -S
El texto sale todo en una línea en el navegadorUsaste \n, que el navegador lee como espacioEn el navegador los saltos se hacen con etiquetas: <p>, <br>

Checkpoint

Intenta responder antes de desplegar cada pregunta.