Ir al contenido principal

XAMPP

Descargar

XAMPP es una distribución de Apache Friends que reúne en un solo paquete Apache, MariaDB, PHP y Perl.

Sirve para instalar un entorno de servidor web local y probar aplicaciones en la propia computadora antes de publicarlas. Un solo instalador deja el servidor y la base de datos funcionando y ya configurados entre sí: no hay que instalar cuatro programas por separado y después hacerlos conversar.

Hay instaladores para Windows, GNU/Linux y macOS; los componentes y versiones disponibles pueden variar según el sistema operativo. En GNU/Linux el archivo termina en .run y en Windows en .exe. Conviene elegir la versión más nueva que ofrezca la página, con PHP 8.2 o superior: las ramas 8.0 y 8.1 ya no reciben correcciones de seguridad.

Descargar XAMPP

Qué trae adentro

La sigla adelanta casi todo: la X es de cross-platform (funciona igual en los tres sistemas), la A de Apache, la M de MySQL, la P de PHP y la última P de Perl. Pero no es un programa: es un paquete, y eso es lo que lo vuelve cómodo.

Componente Qué es Para qué se usa
Apache El servidor web: entrega las páginas a quien las pide desde el navegador. Es el que publica el sitio en http://localhost.
MariaDB El servidor de bases de datos: guarda las tablas y responde las consultas. Es el motor con el que se trabaja en la unidad de Base de Datos.
PHP El lenguaje que se ejecuta del lado del servidor para armar las páginas. Es el lenguaje con el que se escriben las páginas del servidor.
phpMyAdmin Una consola web para administrar la base: ver tablas, escribir consultas, crear usuarios. Es la forma más cómoda de mirar qué hay adentro de la base.
Perl Otro lenguaje de programación. Viene de yapa; no se usa en estas materias.

Una aclaración que confunde la primera vez: en el instalador el componente se llama «MySQL», pero el motor que trae adentro es MariaDB. La explicación está un poco más abajo, en MariaDB, el motor que nos interesa.

El navegador le pide una dirección a Apache; según la dirección, Apache responde con un archivo de la carpeta de los sitios (htdocs) o con la consola de phpMyAdmin, que vive en una carpeta aparte publicada con un Alias XAMPP · qué responde Apache en cada dirección Navegador pide una dirección Apache puerto 80 http://localhost/mi-proyecto/ Carpeta de los sitios htdocs, o la carpeta propia que se configure http://localhost/phpmyadmin phpMyAdmin su propia carpeta, publicada con un Alias phpMyAdmin no vive en htdocs: por eso no se rompe al cambiar la carpeta de los sitios, y por eso no hay que copiarlo.
El navegador siempre le habla a Apache. Lo que cambia es a qué carpeta de adentro de XAMPP apunta cada dirección.

MariaDB, el motor que nos interesa

De todo lo que trae XAMPP, el que importa en la unidad de Base de Datos es MariaDB: el servidor de bases de datos, el programa que guarda las tablas, las mantiene ordenadas y contesta las consultas.

Conviene saber de dónde viene, porque explica la confusión del nombre. MariaDB nació en 2009 como una bifurcación de MySQL, hecha por el mismo equipo que había creado MySQL, cuando Oracle compró Sun, la empresa dueña del proyecto. La intención era conservar el programa con las mismas libertades con las que había nacido. Y como el lenguaje ya era un estándar, el resultado fue compatible: el mismo idioma, el mismo cliente de línea de comandos, el mismo puerto —el 3306— y hasta la misma carpeta, que adentro de XAMPP se sigue llamando mysql.

Esa es la razón por la que XAMPP ya no trae MySQL: desde hace varios años el motor que viene adentro es MariaDB. Y también es la razón por la que no hay que preocuparse por diferencias: SELECT, CREATE TABLE, INSERT, JOIN y todo lo demás funcionan igual en uno y en otro.

Hay un detalle que muestra bien ese parentesco. Cuando se le pide la versión al cliente de línea de comandos, la respuesta empieza así:

/opt/lampp/bin/mysql  Ver 15.1 Distrib 10.4.32-MariaDB, for Linux (x86_64)

El «15.1» no es la versión de la base —la base es la 10.4.32—: es la numeración del cliente, la herramienta con la que uno se conecta, que arrastra el esquema de versiones de MySQL. Quedó en el saludo como marca del linaje. Para retener: XAMPP es el envase, MariaDB es el motor y SQL es el idioma.

Instalación en GNU/Linux

La instalación se hace una sola vez y lleva unos minutos. Son nueve pasos y conviene hacerlos en este orden: cada uno da por hecho el anterior.

  1. Descargar el instalador. Desde apachefriends.org, eligiendo una versión con PHP 8 o superior y la arquitectura de la máquina. En GNU/Linux el archivo termina en .run: es un instalador autoextraíble, no un paquete del sistema. Queda en la carpeta de descargas (Descargas o Downloads, según el idioma del sistema).
  2. Darle permiso de ejecución. Desde una terminal, entrar a la carpeta donde se descargó y cambiar los permisos del archivo.
    cd Descargas
    sudo chmod 755 xampp-linux-*-installer.run
    Por qué: el navegador guarda los archivos como datos, sin el bit de ejecución. Sin ese permiso el sistema se niega a correrlo. 755 significa que el dueño puede leer, escribir y ejecutar, y el resto solo leer y ejecutar.
  3. Ejecutar el instalador.
    sudo ./xampp-linux-*-installer.run
    Por qué sudo: el instalador escribe en /opt/lampp, una carpeta que pertenece a root. Sin privilegios de administrador falla al crear los archivos.
  4. Seguir el asistente gráfico. Se aceptan las opciones por omisión y el paquete queda instalado en /opt/lampp. Por qué esa carpeta: es el prefijo que el paquete espera. El script que arranca los servicios (/opt/lampp/lampp), la configuración y las rutas internas lo dan por sentado, así que instalarlo en otro lugar rompe el arranque.
  5. Arrancar los servicios.
    sudo /opt/lampp/lampp start
    También existe un administrador gráfico: /opt/lampp/manager-linux-x64.run. Para detener todo, sudo /opt/lampp/lampp stop. Por qué: el instalador copia los archivos pero no deja los servicios corriendo. Hasta que no se arrancan, http://localhost no responde.
  6. (Opcional) Dejar php a mano en la terminal.
    sudo ln -s /opt/lampp/bin/php /usr/local/bin/php
    Por qué: la carpeta /opt/lampp/bin no está en el PATH, así que al escribir php la terminal no lo encuentra o usa otro. /usr/local/bin sí está en el PATH y tiene prioridad sobre /usr/bin: el enlace simbólico hace que php -v use el de XAMPP. Se comprueba con which php.
  7. (Opcional) Cambiar la carpeta que sirve Apache. Por omisión Apache busca las páginas en /opt/lampp/htdocs. Si se prefiere trabajar en una carpeta propia —por ejemplo, una que ya esté sincronizada con Git—, se edita el archivo de configuración:
    sudo nano /opt/lampp/etc/httpd.conf
    Hay que reemplazar la ruta en dos líneas, no en una:
    DocumentRoot "/home/usuario/ProyectosWeb"
    <Directory "/home/usuario/ProyectosWeb">
    Por qué dos: DocumentRoot dice de dónde sacar los archivos, y <Directory> dice qué reglas de permiso se aplican a esa carpeta. Si se cambia una sola, Apache sirve desde la carpeta nueva pero arrastra las reglas de la vieja, y aparece un 403 Forbidden. Después hay que reiniciar Apache para que tome el cambio:
    sudo /opt/lampp/lampp restart
  8. Poner el usuario de la computadora en User y Group. Es el paso que más errores de permisos evita. Unas líneas más arriba del DocumentRoot, en el mismo httpd.conf, están estas dos directivas:
    User daemon
    Group daemon
    Hay que escribir el nombre del usuario de la computadora en las dos:
    User usuario
    Group usuario
    Por qué: con daemon Apache arranca y hasta sirve las páginas, porque para entregar un archivo alcanza con permiso de lectura. El problema aparece cuando el sitio tiene que escribir: Apache corre como si fuera otro usuario, la carpeta de los sitios pertenece al usuario de la computadora y solo él tiene permiso de escritura, así que para daemon esa carpeta es de solo lectura. Cualquier script PHP que cree un archivo, suba una imagen o guarde un dato falla con un error de permisos. Y al revés también molesta: los archivos que Apache llegue a crear quedan a nombre de daemon, y después el usuario no puede editarlos ni borrarlos. Con las dos directivas en el nombre propio, Apache trabaja con los mismos permisos que su dueño y el problema desaparece. Después de guardar hay que reiniciar Apache otra vez:
    sudo /opt/lampp/lampp restart
    En Windows este paso no existe: esas directivas no se usan, porque no hay un usuario daemon ni permisos POSIX. Y en un servidor de producción tampoco se hace así —ahí Apache usa un usuario propio sin privilegios—, pero para una computadora de desarrollo es lo que corresponde.
  9. Copiar el contenido de htdocs a la carpeta nueva.
    cp -r /opt/lampp/htdocs/* /home/usuario/ProyectosWeb/
    Por qué: htdocs no está vacío: trae la página de bienvenida de XAMPP. Si el DocumentRoot apunta a una carpeta vacía, http://localhost no muestra nada. phpMyAdmin no hace falta copiarlo, porque no vive ahí: Apache lo publica con un Alias y sigue disponible desde su propia carpeta, como muestra el diagrama de arriba.

Instalación en Windows

En Windows el instalador es gráfico de punta a punta y no pide escribir ni un comando. Los pasos son los mismos en espíritu, pero cambian los permisos, las carpetas y la forma de arrancar los servicios.

  1. Descargar el instalador. En la misma página, sección XAMPP for Windows, versión de 64 bits (unos 149 MB). El archivo termina en .exe. Requiere Windows 7 o superior; XP y 2003 no están soportados.
  2. Cerrar lo que ocupe los puertos 80 y 443. Aplicaciones como IIS, Skype o algunos antivirus se quedan con esos puertos. Por qué: Apache necesita el puerto 80 para responder. Si está tomado, arranca y se detiene solo. El síntoma es que el servicio se apaga al instante en el Panel de Control y http://localhost no responde; el detalle exacto queda en C:\xampp\apache\logs\error.log. Se resuelve cerrando el otro programa o cambiando Listen 80 por Listen 8080 en httpd.conf.
  3. Ejecutarlo como administrador. Clic con el botón derecho sobre el archivo y Ejecutar como administrador. Por qué: es el equivalente al sudo de GNU/Linux. El instalador escribe en C:\ y registra servicios de Windows. Si Windows avisa que el programa es de un editor desconocido, hay que confirmar: es el aviso normal de todo lo que se baja de internet.
  4. Elegir los componentes. Como mínimo, Apache, MySQL, PHP y phpMyAdmin. FileZilla, Mercury Mail, Tomcat y Webalizer no hacen falta para lo que se usa en estas materias.
  5. Elegir la carpeta de instalación. La que propone el instalador, C:\xampp, está bien. Por qué evitar C:\Program Files: esa carpeta está protegida por Windows. Si el paquete queda ahí, al editar php.ini o httpd.conf desde un editor sin permisos elevados Windows puede guardar una copia invisible en otro lado y los cambios no tienen efecto. También complica el arranque de los servicios.
  6. Terminar el asistente y abrir el Panel de Control (C:\xampp\xampp-control.exe). Apretar Start en Apache y después Start en MySQL: cuando los dos nombres quedan resaltados en verde, están andando. Con Service → Install se instalan como servicios de Windows, para que arranquen solos con la máquina. Por qué el panel: es el reemplazo del lampp start de GNU/Linux.
  7. Aceptar el aviso del Firewall de Windows cuando pregunte por Apache: permitir solo en redes privadas. Por qué: el servidor es para tu computadora. Habilitarlo en redes públicas lo dejaría expuesto en cualquier Wi-Fi al que te conectes.
  8. (Opcional) Agregar PHP al PATH. Es el equivalente al enlace simbólico del paso 6 de GNU/Linux. En el menú Inicio se busca Variables de entorno → Editar las variables de entorno del sistema → Path → Nuevo → C:\xampp\php. Después hay que cerrar y reabrir la terminal, porque cada consola lee el PATH cuando se abre. Se comprueba con php -v. Por qué: sin esto, la terminal no reconoce el comando php y las tareas de VS Code tampoco encuentran el intérprete. Se nota enseguida: al escribir php -v la respuesta es un «orden no encontrada» o la versión de otro PHP que esté instalado aparte.
  9. (Opcional) Cambiar la carpeta que sirve Apache. Se edita C:\xampp\apache\conf\httpd.conf y se reemplaza la ruta en las dos líneas, igual que en GNU/Linux:
    DocumentRoot "C:/ProyectosWeb"
    <Directory "C:/ProyectosWeb">
    Detalles que hacen perder tiempo: en Windows no existe $HOME, así que va la ruta completa; las barras se escriben normales (C:/ProyectosWeb) o dobles (C:\\ProyectosWeb), nunca una sola barra invertida, que se interpreta como carácter de escape. Después se detiene y se arranca Apache desde el Panel de Control.
  10. (Opcional) Copiar el contenido de htdocs a la carpeta nueva con el Explorador de Windows, por la misma razón que en GNU/Linux: conservar la página de bienvenida.

Las mismas piezas en cada sistema

La lista de pasos cambia, pero las piezas son las mismas. Esta tabla sirve para traducir cualquier tutorial de un sistema al otro.

Qué GNU/Linux Windows
El instalador xampp-linux-*-installer.run xampp-windows-x64-*.exe
Permiso para ejecutarlo sudo y chmod 755 Ejecutar como administrador
Carpeta del paquete /opt/lampp C:\xampp
Carpeta de los sitios /opt/lampp/htdocs C:\xampp\htdocs
Configuración de Apache /opt/lampp/etc/httpd.conf C:\xampp\apache\conf\httpd.conf
Arrancar y detener sudo /opt/lampp/lampp start
sudo /opt/lampp/lampp stop
Botones Start y Stop del Panel de Control
El administrador gráfico /opt/lampp/manager-linux-x64.run C:\xampp\xampp-control.exe
Tener php en la terminal Enlace en /usr/local/bin/php Agregar C:\xampp\php al PATH
Permisos de archivos chmod (hay bit de ejecución) Pestaña Seguridad de la carpeta (no hay bit de ejecución)

Comprobar que quedó andando

Terminada la instalación hay dos direcciones que conviene probar en el navegador. La primera confirma que el servidor web responde; la segunda, que el motor de la base está arriba:

  • http://localhost → la página de bienvenida de XAMPP. Si aparece, Apache está funcionando.
  • http://localhost/phpmyadmin → la consola de la base. Si aparece, MariaDB está funcionando.

Y hay una manera de confirmar con exactitud qué motor y qué versión hay del otro lado: preguntárselo. En la consola de phpMyAdmin, en la pestaña SQL:

SELECT VERSION();

La respuesta es la versión del servidor: por ejemplo, 10.4.32-MariaDB. Es algo más que una comprobación: es la primera consulta del año, y ya tiene la forma de todas las que vienen después. Se pide algo, y el servidor contesta.

Dónde van los proyectos

Por omisión, Apache busca las páginas en una carpeta llamada htdocs —C:\xampp\htdocs en Windows, /opt/lampp/htdocs en GNU/Linux— y cada proyecto se abre escribiendo http://localhost/nombre_de_la_carpeta/. Alcanza con crear ahí adentro una carpeta por proyecto.

Lo que Apache hace al recibir esa dirección es buscar un archivo de entrada adentro de la carpeta del proyecto: si encuentra un index.php —o un index.html—, lo usa. El código PHP se ejecuta en el servidor y lo que llega al navegador es el resultado, nunca el código. Si en la pantalla aparece el texto de un script PHP en lugar de lo que tenía que mostrar, es que el archivo se está entregando tal cual en vez de ejecutarse.

Ese index.php es la puerta de entrada: es el único archivo que el navegador pide directamente. Los demás —clases, funciones, plantillas— los carga el propio PHP a partir de él, así que el proyecto puede tener por dentro la organización que quiera sin que las direcciones cambien.

Si en cambio se prefiere una carpeta propia, se cambia el DocumentRoot con los pasos de GNU/Linux o de Windows, según el sistema. Y ahí se ve por qué el Alias de phpMyAdmin importa: la consola de la base no está dentro de htdocs, así que cambiar la carpeta de los sitios no la afecta y sigue funcionando igual.

Antes de publicar