Con HTML, el servidor entrega el archivo tal como está escrito: si diez personas
abren index.html, las diez reciben exactamente lo mismo. Eso no alcanza para un
sitio que tiene que mostrar el saludo según la hora, los productos de una lista o el
mensaje de “datos recibidos” después de un formulario. Para eso existe PHP.
Un programa que escribe HTML
PHP es un lenguaje de programación que se ejecuta en el servidor. Su trabajo
casi siempre es el mismo: hacer cálculos y decisiones, y escribir el HTML que se
le va a enviar al navegador.
Qué pasa cuando alguien abre un .php
%%{init: {'sequence': {'width': 210, 'noteMargin': 14, 'messageAlign': 'center'}}}%%
sequenceDiagram
participant N as Navegador
participant S as Servidor
participant P as PHP
N->>S: GET /index.php
S->>P: Ejecuta index.php
Note over P: Corre el código:<br/>calcula, decide<br/>y escribe HTML
P-->>S: HTML resultante
S-->>N: Respuesta con solo HTML
Note over N: Dibuja la página.<br/>Nunca ve el PHP
El navegador pide index.php, igual que antes pedía index.html.
El servidor ve la extensión .php y, en vez de enviar el archivo, se lo pasa a PHP.
PHP ejecuta el código de arriba hacia abajo. Todo lo que el código imprime se
va juntando como texto.
El servidor envía ese texto (el HTML resultante) al navegador.
El navegador dibuja la página. Para él es HTML normal: no sabe que hubo PHP.
Por eso el usuario nunca ve tu código PHP
Si abres F12 o Ver código fuente en una página hecha con PHP, solo verás HTML.
El código quedó en el servidor. Esto es lo que permite que más adelante una
contraseña de base de datos viva en un .php sin que nadie la vea.
Frontend y backend, otra vez
HTML, CSS y Tailwind
PHP
Dónde se ejecuta
En el navegador del usuario
En el servidor
Quién lo ve
Cualquiera, con F12
Nadie: solo se ve lo que imprime
Qué hace
Muestra y da estilo
Calcula, decide y genera el HTML
Cuándo cambia
Cuando editas el archivo
En cada solicitud: cada visita puede ser distinta
El intérprete
En C escribías el código, lo compilabas con gcc y ejecutabas el programa
resultante. PHP no se compila: un programa llamado intérprete (el comando php)
lee tu archivo y lo ejecuta en el momento, línea por línea.
Compilar frente a interpretar
flowchart LR
subgraph C["En C"]
A1["programa.c"] -->|"gcc"| B1["programa<br/>(ejecutable)"] --> C1["Salida"]
end
subgraph PHP["En PHP"]
A2["programa.php"] -->|"php lo lee y<br/>lo ejecuta"| C2["Salida"]
end
Consecuencia práctica: guardas y recargas. No hay paso de compilación. Si hay un
error, aparece recién cuando PHP llega a ejecutar ese archivo.
Dos formas de ejecutar un archivo PHP
1. En la terminal
Para probar el lenguaje, sin navegador. Crea hola.php:
<?phpecho "Hola desde PHP\n";echo "Esto lo imprimió la terminal\n";
Y ejecútalo desde la carpeta donde está:
php hola.php
Hola desde PHPEsto lo imprimió la terminal
La mayoría de los ejemplos de las partes 2 a 4 se prueban así: es más rápido y la
salida se lee limpia.
2. En el navegador, con el servidor de PHP
Para el sitio. Desde la carpeta del proyecto:
php -S localhost:8000
[Mon Oct 19 19:30:00 2026] PHP 8.3.6 Development Server (http://localhost:8000) started
Abre http://localhost:8000/hola.php en el navegador. La terminal queda ocupada
mostrando cada solicitud que llega; para detener el servidor, Ctrl + C.
php archivo.php
php -S localhost:8000
Para qué
Probar el lenguaje
Ver el sitio en el navegador
La salida aparece en
La terminal
El navegador
Termina
Al llegar al final del archivo
Cuando presionas Ctrl + C
\n produce
Un salto de línea
Un espacio (el navegador lee HTML)
Incorrecto: abrir el .php con Live Server o con doble clic
Live Server y el doble clic entregan el archivo tal cual, sin pasárselo a PHP.
Verás el código fuente en pantalla, o el navegador te ofrecerá descargarlo.
<?php echo "Hola desde PHP"; ?>
Correcto: levantar php -S en la carpeta del proyecto
cd ~/mi-sitiophp -S localhost:8000
Y en el navegador, http://localhost:8000. Si no escribes el nombre de un
archivo, el servidor busca index.php (o index.html) en esa carpeta.
La carpeta desde donde lo levantas es la raíz del sitio
php -S sirve los archivos de la carpeta en la que estás parado en la terminal.
Si lo levantas en tu carpeta personal, localhost:8000/index.php buscará
~/index.php y responderá 404. Revisa con pwd antes de levantarlo.
Pruébalo
Crea hola.php y ejecútalo con php hola.php
Levanta php -S localhost:8000 en la misma carpeta y abre localhost:8000/hola.php
Mira el código fuente de la página en el navegador (Ctrl + U): no aparece <?php
Error provocado: abre hola.php con Live Server y mira qué muestra
Error provocado: levanta el servidor en otra carpeta y lee el 404 en la terminal
Errores comunes
Síntoma
Causa
Solución
Se ve el código <?php … en el navegador
Abriste el archivo con Live Server o con doble clic
Ábrelo desde http://localhost:8000 con php -S levantado
Failed to listen on localhost:8000 (reason: Address already in use)
Ya hay un servidor corriendo en ese puerto, en otra terminal
Ciérralo con Ctrl + C o usa otro puerto: php -S localhost:8001
404 Not Found en el navegador
Levantaste el servidor en otra carpeta, o el nombre del archivo no coincide
Revisa con pwd y ls; recuerda que Linux distingue mayúsculas
Checkpoint
Intenta responder antes de desplegar cada pregunta.
Un compañero dice que puede ver tu código PHP con F12. ¿Tiene razón?
No. F12 muestra lo que recibió el navegador, y el navegador solo recibe el
HTML que PHP imprimió. El código PHP se ejecutó y se quedó en el servidor.
Abriste index.php y ves el texto <?php echo "Hola"; ?> en pantalla. ¿Qué pasó?
El archivo no pasó por PHP: lo abriste con Live Server, con doble clic o sin el
servidor levantado. Hay que levantar php -S localhost:8000 en la carpeta del
proyecto y entrar por http://localhost:8000/index.php.
¿Por qué en PHP no hay que compilar como en C?
Porque PHP es interpretado: el comando php lee el archivo y lo ejecuta en el
momento. Guardas, recargas y ya está corriendo la versión nueva.
¿Cuándo usarías php archivo.php y cuándo php -S?
php archivo.php para probar lógica del lenguaje y ver la salida en la terminal.
php -S para ver el sitio en el navegador, porque lo que imprimes es HTML y
necesitas que el navegador lo dibuje.