Tema
Qué es PHP
En esta lección entenderás qué es PHP, dónde se ejecuta y qué pasa exactamente desde que alguien escribe una dirección en su navegador hasta que ve la página. Tener esto claro te ahorrará horas de confusión más adelante ("¿por qué no puedo usar alert() en PHP?", "¿por qué mi variable desapareció al recargar?").
Concepto
Cliente y servidor
Imagina un restaurante:
- Tú (el cliente) te sientas y pides un platillo. En la web, el cliente es el navegador (Chrome, Firefox, el celular de tu cliente).
- La cocina (el servidor) recibe el pedido, consulta la despensa (la base de datos), cocina y te entrega el plato terminado.
- El mesero es el protocolo HTTP: lleva el pedido (la petición) y trae el plato (la respuesta).
PHP vive en la cocina. Tú nunca ves la receta, sólo el plato. Del mismo modo, el navegador nunca ve tu código PHP: sólo recibe el HTML que PHP generó.
El ciclo petición/respuesta
- El usuario visita
https://mitienda.com/productos.php. - El navegador envía una petición HTTP
GET /productos.phpal servidor. - El servidor web (Apache o Nginx) ve que el archivo termina en
.phpy se lo pasa al intérprete de PHP. - PHP ejecuta el archivo de arriba a abajo: consulta la base de datos, arma una lista de productos, etc.
- Todo lo que el script "imprime" (con
echoo con HTML fuera de las etiquetas PHP) se junta en la respuesta. - El servidor envía ese HTML al navegador.
- PHP termina y olvida todo. Las variables se destruyen. La siguiente petición empieza de cero.
Ese último punto es clave: PHP es sin estado (stateless). Si quieres recordar algo entre una página y otra (por ejemplo, que el usuario inició sesión), necesitas sesiones, cookies o una base de datos. Lo verás en la lección 12.
PHP frente a JavaScript
| JavaScript (en el navegador) | PHP | |
|---|---|---|
| Dónde se ejecuta | En la computadora del usuario | En el servidor |
| ¿El usuario ve el código? | Sí (Ver código fuente) | No, nunca |
| Acceso a la base de datos | No directamente | Sí |
| Puede leer archivos del servidor | No | Sí |
| Reacciona a clics sin recargar | Sí | No (necesita una nueva petición) |
No compiten: se complementan. PHP genera la página y guarda datos; JavaScript la hace interactiva. Muchos proyectos usan ambos.
¿Qué se construye con PHP?
- Sitios con WordPress (más del 40 % de la web).
- Tiendas en línea (WooCommerce, PrestaShop, Magento).
- Sistemas a medida: inventarios, citas, reservaciones, punto de venta, intranets.
- APIs que consumen apps móviles o frontends en React/Vue.
- Aplicaciones grandes con frameworks como Laravel o Symfony.
Ejemplo
Un archivo PHP mezcla HTML normal con bloques de código PHP. El código PHP va entre la etiqueta de apertura <?php y la de cierre ?>.
php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Mi primera página PHP</title>
</head>
<body>
<h1>Hola desde el servidor</h1>
<?php
// Todo lo que está aquí dentro lo ejecuta el servidor.
$nombre = "Ana"; // Una variable (empieza con $)
$hora = date('H:i'); // Hora actual del servidor
echo "<p>Bienvenida, $nombre.</p>";
echo "<p>En el servidor son las $hora.</p>";
?>
<p>Este párrafo es HTML normal, PHP lo deja pasar tal cual.</p>
</body>
</html>Si abres "Ver código fuente" en el navegador, verás algo así:
html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Mi primera página PHP</title>
</head>
<body>
<h1>Hola desde el servidor</h1>
<p>Bienvenida, Ana.</p><p>En el servidor son las 14:32.</p>
<p>Este párrafo es HTML normal, PHP lo deja pasar tal cual.</p>
</body>
</html>Ni rastro del código PHP. Sólo el resultado.
Paso a paso: qué pasa con cada petición
Este pequeño script demuestra que PHP olvida todo entre peticiones:
php
<?php
// contador.php
// Cada vez que recargas, $visitas vuelve a valer 0.
$visitas = 0;
$visitas++;
echo "Visitas: $visitas"; // Siempre imprimirá "Visitas: 1"Recarga diez veces y siempre verás Visitas: 1. Para contar visitas de verdad tendrías que guardar el número en un archivo, en una sesión o en una base de datos.
Ahora uno que sí recuerda, guardando en un archivo de texto:
php
<?php
// contador-archivo.php
$archivo = __DIR__ . '/visitas.txt'; // __DIR__ = carpeta de este script
// Si el archivo existe, leemos el número; si no, empezamos en 0.
$visitas = file_exists($archivo) ? (int) file_get_contents($archivo) : 0;
$visitas++;
// Guardamos el nuevo valor para la próxima petición.
file_put_contents($archivo, (string) $visitas);
echo "Esta página se ha visitado $visitas veces.";Aquí el estado vive en el disco del servidor, no en la memoria de PHP.
Archivos sólo-PHP
Cuando un archivo contiene sólo código PHP (sin HTML), la buena práctica es no cerrar la etiqueta ?> al final. Así evitas que un espacio o salto de línea accidental después del cierre se envíe al navegador y cause errores como "headers already sent".
php
<?php
// config.php — sólo PHP, sin etiqueta de cierre al final
const NOMBRE_SITIO = 'Mi Tienda';
const MONEDA = 'MXN';Buena práctica
Piensa siempre: "¿esto pasa en el servidor o en el navegador?". Validar un formulario con JavaScript es comodidad para el usuario; validarlo con PHP es obligatorio, porque el navegador lo controla el usuario y puede saltarse cualquier cosa.
Error común
Abrir el archivo .php con doble clic (la barra muestra file:///C:/...). El navegador no sabe ejecutar PHP: verás el código o una página en blanco. Siempre debes acceder a través de un servidor: http://localhost/.... En la siguiente lección lo configuramos.
Versiones
PHP 8 (2020) trajo cambios enormes: match, argumentos con nombre, operador nullsafe, JIT. PHP 8.1 añadió enums y propiedades readonly; 8.2 clases readonly; 8.3 constantes tipadas en clases y json_validate(). Si tu hosting ofrece varias versiones, elige siempre la más reciente estable.
Ejercicios
- Explica con tus palabras (2–3 líneas) por qué un usuario no puede ver tu contraseña de base de datos aunque esté escrita en un archivo
.php. - Escribe una página PHP que muestre "Buenos días", "Buenas tardes" o "Buenas noches" según la hora del servidor (pista:
date('H')devuelve la hora de 00 a 23; usaif, aunque aún no lo veamos a fondo). - ¿Qué imprimirá el navegador si recargas 3 veces
contador.php? ¿Ycontador-archivo.php?
Ver solución
Porque PHP se ejecuta en el servidor y sólo envía al navegador lo que el script imprime. El código fuente (incluida la contraseña) nunca viaja por la red, siempre que el servidor esté bien configurado para procesar
.php.
php
<?php
$hora = (int) date('H'); // Convertimos "09" a 9
if ($hora < 12) {
$saludo = 'Buenos días';
} elseif ($hora < 19) {
$saludo = 'Buenas tardes';
} else {
$saludo = 'Buenas noches';
}
?>
<!DOCTYPE html>
<html lang="es">
<head><meta charset="UTF-8"><title>Saludo</title></head>
<body>
<h1><?= $saludo ?></h1>
</body>
</html><?= $saludo ?> es la forma corta de <?php echo $saludo; ?>.
contador.phpimprimirá siempreVisitas: 1.contador-archivo.phpimprimirá 1, 2 y 3 (si el archivo no existía antes), porque guarda el número en disco.
Resumen
- PHP se ejecuta en el servidor y envía al navegador sólo el HTML resultante.
- Cada petición es independiente: al terminar, PHP olvida todas las variables.
- El código PHP va entre
<?phpy?>; en archivos sólo-PHP se omite el cierre. <?= ... ?>imprime un valor de forma corta.- Los archivos PHP deben abrirse por
http://localhost, nunca con doble clic. - Valida siempre en el servidor: el navegador está en manos del usuario.