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.
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.
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.
-
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 (DescargasoDownloads, según el idioma del sistema). -
Darle permiso de ejecución. Desde una terminal, entrar a la carpeta donde se descargó y cambiar los permisos del archivo.
Por qué: el navegador guarda los archivos como datos, sin el bit de ejecución. Sin ese permiso el sistema se niega a correrlo.cd Descargas sudo chmod 755 xampp-linux-*-installer.run755significa que el dueño puede leer, escribir y ejecutar, y el resto solo leer y ejecutar. -
Ejecutar el instalador.
Por quésudo ./xampp-linux-*-installer.runsudo: el instalador escribe en/opt/lampp, una carpeta que pertenece aroot. Sin privilegios de administrador falla al crear los archivos. -
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. -
Arrancar los servicios.
También existe un administrador gráfico:sudo /opt/lampp/lampp start/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://localhostno responde. -
(Opcional) Dejar
phpa mano en la terminal.
Por qué: la carpetasudo ln -s /opt/lampp/bin/php /usr/local/bin/php/opt/lampp/binno está en elPATH, así que al escribirphpla terminal no lo encuentra o usa otro./usr/local/binsí está en elPATHy tiene prioridad sobre/usr/bin: el enlace simbólico hace quephp -vuse el de XAMPP. Se comprueba conwhich php. -
(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:
Hay que reemplazar la ruta en dos líneas, no en una:sudo nano /opt/lampp/etc/httpd.conf
Por qué dos:DocumentRoot "/home/usuario/ProyectosWeb" <Directory "/home/usuario/ProyectosWeb">DocumentRootdice 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 un403 Forbidden. Después hay que reiniciar Apache para que tome el cambio:sudo /opt/lampp/lampp restartOjo con$HOME. Escribir$HOME/ProyectosWebfunciona en la terminal, pero no dentro dehttpd.conf: Apache no interpreta variables del shell, buscaría una carpeta llamada literalmente$HOME. Va la ruta real, por ejemplo/home/usuario/ProyectosWeb. -
Poner el usuario de la computadora en
UseryGroup. Es el paso que más errores de permisos evita. Unas líneas más arriba delDocumentRoot, en el mismohttpd.conf, están estas dos directivas:
Hay que escribir el nombre del usuario de la computadora en las dos:User daemon Group daemon
Por qué: conUser usuario Group usuariodaemonApache 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 paradaemonesa 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 dedaemon, 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:
En Windows este paso no existe: esas directivas no se usan, porque no hay un usuariosudo /opt/lampp/lampp restartdaemonni 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. -
Copiar el contenido de
htdocsa la carpeta nueva.
Por qué:cp -r /opt/lampp/htdocs/* /home/usuario/ProyectosWeb/htdocsno está vacío: trae la página de bienvenida de XAMPP. Si elDocumentRootapunta a una carpeta vacía,http://localhostno muestra nada. phpMyAdmin no hace falta copiarlo, porque no vive ahí: Apache lo publica con unAliasy 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.
-
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. -
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://localhostno responde; el detalle exacto queda enC:\xampp\apache\logs\error.log. Se resuelve cerrando el otro programa o cambiandoListen 80porListen 8080enhttpd.conf. -
Ejecutarlo como administrador. Clic con el botón derecho sobre el archivo y Ejecutar como administrador.
Por qué: es el equivalente al
sudode GNU/Linux. El instalador escribe enC:\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. - 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.
-
Elegir la carpeta de instalación. La que propone el instalador,
C:\xampp, está bien. Por qué evitarC:\Program Files: esa carpeta está protegida por Windows. Si el paquete queda ahí, al editarphp.iniohttpd.confdesde 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. -
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 dellampp startde GNU/Linux. - 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.
-
(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 elPATHcuando se abre. Se comprueba conphp -v. Por qué: sin esto, la terminal no reconoce el comandophpy las tareas de VS Code tampoco encuentran el intérprete. Se nota enseguida: al escribirphp -vla respuesta es un «orden no encontrada» o la versión de otro PHP que esté instalado aparte. -
(Opcional) Cambiar la carpeta que sirve Apache. Se edita
C:\xampp\apache\conf\httpd.confy se reemplaza la ruta en las dos líneas, igual que en GNU/Linux:
Detalles que hacen perder tiempo: en Windows no existeDocumentRoot "C:/ProyectosWeb" <Directory "C:/ProyectosWeb">$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. -
(Opcional) Copiar el contenido de
htdocsa 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 startsudo /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
root y, por omisión, sin contraseña; la consola de phpMyAdmin queda abierta para cualquiera que entre a esa dirección. Todo eso es cómodo en un entorno local y es una puerta abierta en un servidor conectado a internet. Cuando el sistema haya que publicarlo de verdad, se sube a un hosting y ahí se usa un usuario con contraseña y con los permisos mínimos.
sudo chmod -R 777 sobre la carpeta del proyecto. Funciona, pero 777 deja esas carpetas escribibles por cualquier usuario del sistema, que es mucho más de lo necesario. Lo correcto es arreglar el motivo: que Apache corra con el usuario de la computadora —el paso 8 de la instalación en GNU/Linux— y que las carpetas donde el sitio tiene que escribir sean suyas. En Windows ese comando no existe y tampoco hace falta: los permisos se manejan desde la pestaña Seguridad de la carpeta, y se evitan casi todos instalando XAMPP fuera de C:\Program Files.