sábado, 25 de abril de 2026

Servidor local en macOS: Python vs PHP

Si estás desarrollando una web en tu Mac, antes o después necesitas verla funcionando como si estuviera en internet. Abrir el HTML con doble clic muchas veces no basta: ni se cargan los JSON, ni los formularios, ni las imágenes que vienen por fetch. Aquí te explico, paso a paso, cómo levantar un servidor local en macOS usando Python (para webs estáticas) o PHP (cuando necesitas algo más). Sin programas raros, sin entornos complicados — solo Terminal y dos comandos.

🧐 ¿Por qué necesitas un servidor local?

Cuando abres un archivo HTML haciendo doble clic, el navegador lo carga con el protocolo file://. Eso funciona para HTML simple, pero se rompe en cuanto tu web empieza a hacer cosas modernas:

  • Si tu JavaScript usa fetch() para cargar un JSON → error de CORS, el navegador lo bloquea.
  • Si tienes módulos ES (import / export) → tampoco se cargan.
  • Si quieres probar formularios con PHP → directamente no se ejecutan.
  • Si trabajas con rutas absolutas (/css/style.css) → no funcionan correctamente.

La solución es levantar un servidor HTTP en tu propia máquina, que sirva los archivos como lo haría un hosting real. Todo desde la línea de comandos. Empezamos.

⚡ Opción 1: Servidor con Python (lo más rápido)

Python viene preinstalado en macOS, así que no necesitas instalar nada. Abre Terminal y comprueba que lo tienes:

TERMINAL MAC
$ python3 --version
Python 3.x.x

Si te devuelve una versión, perfecto. Ahora navega hasta la carpeta de tu proyecto y arranca el servidor:

TERMINAL MAC
# Ve a la carpeta de tu proyecto
$ cd ~/Documentos/mi-web

# Arranca el servidor en el puerto 8000
$ python3 -m http.server 8000

Ahora abre tu navegador y entra en http://localhost:8000. Si en la carpeta hay un index.html, lo verás directamente. Si no, te aparecerá un listado de archivos.

💡 Cambiar el puerto

Si el puerto 8000 te lo está usando otra app, prueba con otro: python3 -m http.server 3000. Cualquier número entre 3000 y 9999 te vale.

🛑 Cómo parar el servidor

Mientras el servidor está activo, la Terminal queda "ocupada" mostrándote las peticiones que llegan. Para detenerlo, pulsa Ctrl + C en esa ventana.

🐘 Opción 2: Servidor con PHP (cuando necesitas más)

El servidor de Python es perfecto para webs estáticas (HTML + CSS + JavaScript + JSON), pero no ejecuta código PHP. Si abres un archivo .php con el servidor de Python, el navegador te descargará el código fuente como si fuera un texto. No es lo que queremos.

Para que PHP funcione necesitas… bueno, PHP. Y aquí viene el problema:

⚠️ macOS ya no incluye PHP

Desde macOS Monterey (2021), Apple eliminó PHP del sistema. Si pruebas php -v y te sale command not found: php, es completamente normal. Hay que instalarlo a mano.

📦 Paso previo: instalar Homebrew

Homebrew es el gestor de paquetes estándar en macOS. Sirve para instalar herramientas de desarrollo de forma limpia (sin tener que ir buscando instaladores por internet). Si no lo tienes, este es el momento.

Comprueba primero si ya está instalado:

TERMINAL MAC
$ brew --version

Si te dice Homebrew 4.x.x → pasa al siguiente paso. Si te dice command not found: brew → instálalo con este comando oficial:

TERMINAL MAC
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Te pedirá tu contraseña de Mac (la misma que usas para iniciar sesión). El proceso tarda unos minutos. Cuando acabe, léete el final del mensaje con atención: te dirá que añadas dos líneas a tu archivo ~/.zprofile para que el comando brew esté disponible. Algo así:

TERMINAL MAC
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"

Cierra y abre Terminal de nuevo, y comprueba que brew --version ya te responde.

📥 Instalar PHP

Una vez tengas Homebrew funcionando, instalar PHP es un solo comando:

TERMINAL MAC
$ brew install php

Tarda entre 1 y 3 minutos. Cuando termine, comprueba que está bien:

TERMINAL MAC
$ php -v
PHP 8.4.x (cli) (built: ...)

🚀 Arrancar el servidor PHP

El comando es prácticamente igual de sencillo que el de Python. Ve a tu carpeta y lánzalo:

TERMINAL MAC
$ cd ~/Documentos/mi-web
$ php -S localhost:8000

Abre http://localhost:8000 y ya tienes un servidor que sirve HTML, CSS, JS y JSON exactamente igual que el de Python, pero además ejecuta archivos PHP.

🆚 ¿Cuál uso, Python o PHP?

Depende de lo que tenga tu proyecto. Esta es la regla simple:

Servidor HTML / CSS / JS / JSON / imágenes Ejecuta PHP
python3 -m http.server 8000 ✓ Sí ✗ No
php -S localhost:8000 ✓ Sí ✓ Sí
📌 Aclaración importante sobre JSON

"Ejecutar JSON" no existe. JSON es solo un formato de texto plano. Cualquier servidor HTTP lo sirve sin problema, da igual que sea Python, PHP, Node o Apache. Quien lo procesa es tu JavaScript, en el navegador, cuando hace fetch('data/archivo.json').

🧪 Caso real: por qué el JSON no carga al hacer doble clic

Esto es lo que le pasa a casi todo el mundo la primera vez: tienes una web bonita con un archivo resenas.json que se carga con JavaScript. Al abrir el HTML con doble clic ves el diseño pero la sección donde deberían aparecer las reseñas está vacía. Si abres la consola del navegador (Cmd + Option + I), ves un error como este:

CONSOLA NAVEGADOR
Access to fetch at 'file:///.../data/resenas.json'
from origin 'null' has been blocked by CORS policy

Eso es exactamente lo que evitas levantando un servidor local. En cuanto sirvas tu web por http://localhost:8000, el JSON se carga sin problemas. No hay que cambiar ni una línea del código: es exactamente el mismo código que funcionará luego en producción.

⚙️ Detalles que conviene saber

🔁 ¿Tengo que parar y arrancar cada vez que cambio un archivo?

No. Los cambios en HTML, CSS, JS o JSON se reflejan automáticamente al recargar la página (Cmd + R). Solo necesitas reiniciar el servidor si cambias algo de la propia configuración (puerto, carpeta raíz, etc.).

🚫 "Ya hay algo usando el puerto 8000"

Si te aparece un error tipo Address already in use, es que tienes otro servidor levantado. Cambia el número del puerto y listo:

TERMINAL MAC
$ php -S localhost:3000
# o cualquier otro puerto libre: 3001, 5500, 8080, etc.

📱 ¿Puedo verlo desde el móvil?

Sí, y es muy útil para probar el responsive. En lugar de localhost, arranca el servidor escuchando en todas las interfaces de red, y luego conéctate desde el móvil usando la IP local de tu Mac:

TERMINAL MAC
# Para Python — escucha en todas las interfaces
$ python3 -m http.server 8000 --bind 0.0.0.0

# Para PHP — sustituye 0.0.0.0 por la IP que quieras exponer
$ php -S 0.0.0.0:8000

# Y para saber tu IP local en macOS:
$ ipconfig getifaddr en0
192.168.1.45

Con ese resultado, desde el móvil entrarías en http://192.168.1.45:8000. Eso sí, el móvil tiene que estar en la misma red WiFi que el Mac.

🚦 ¿Y si quiero algo más profesional?

Lo que hemos visto es perfecto para desarrollo rápido. Pero si trabajas con WordPress, Laravel u otros proyectos que necesitan base de datos MySQL, el servidor PHP integrado se queda corto. Para esos casos hay alternativas más completas:

  • Laravel Herd — gratis, ligero, moderno. Detecta tus carpetas automáticamente y las sirve en proyecto.test. La opción más recomendable hoy en día.
  • MAMP — clásico, gratis. Entorno completo Apache + PHP + MySQL con interfaz gráfica.
  • Docker — para los que quieran replicar exactamente el entorno de producción.

Pero esto ya es harina de otro costal — lo dejamos para una próxima entrada.

✅ Resumen rápido

💡 Lo mínimo que necesitas recordar

Para una web estática (HTML, CSS, JS, JSON, imágenes): python3 -m http.server 8000.
Si tu proyecto incluye PHP: instala Homebrew, luego brew install php, y arranca con php -S localhost:8000.
En ambos casos, abre http://localhost:8000 en el navegador y a programar.

Espero que te haya servido. Si te bloqueas en algún paso, déjame un comentario y te echo una mano. 👋

• • •

No hay comentarios:

Publicar un comentario