Post actualizado el día octubre 24, 2026 by DeiviSanzPlay
Por qué XAMPP falla y cómo diagnosticarlo sin perder la cabeza
XAMPP es el entorno de desarrollo local más extendido para probar sitios en PHP y MySQL. Sin embargo, su aparente simplicidad oculta un ecosistema de servicios interdependientes (Apache, MySQL/MariaDB, FileZilla, Mercury) que, cuando uno de ellos tropieza, bloquea todo el flujo de trabajo. Antes de reinstalar, conviene entender que la mayoría de los fallos tienen causas repetitivas y soluciones concretas.
Apache no arranca: los puertos 80 y 443 en conflicto
El síntoma clásico es el mensaje de que Apache se detuvo inesperadamente. Casi siempre se debe a que otro programa ocupa el puerto 80. Skype, IIS de Windows, algunos servicios de Adobe o incluso el propio servicio «World Wide Web Publishing» pueden estar escuchando. Para confirmarlo, abre una consola y ejecuta netstat -ano | findstr :80 en Windows; en Linux o macOS, sudo lsof -i :80. La columna final muestra el PID del proceso culpable.
Si no puedes desactivar ese programa, cambia los puertos de Apache: en el panel de XAMPP pulsa Config junto a Apache, abre httpd.conf y sustituye Listen 80 por Listen 8080 y ServerName localhost:80 por ServerName localhost:8080. Repite el cambio en httpd-ssl.conf para el 443. Después accede a http://localhost:8080.
MySQL se cierra solo o no responde
Un MySQL que arranca y muere a los segundos suele arrastrar una tabla corrupta o un archivo ibdata1 dañado tras un apagón. Revisa xampp/mysql/data/mysql_error.log: si aparece «InnoDB: Database page corruption», puedes intentar recuperar con innodb_force_recovery = 1 en my.ini. Si el error es «Another MySQL daemon already running», existe un proceso zombi: en Windows cierra con el Administrador de tareas; en Linux, sudo pkill mysqld.
También es frecuente el fallo de acceso con root sin contraseña por un config.inc.php desactualizado en phpMyAdmin. Edita ese archivo y ajusta las credenciales al usuario y clave reales.
Error 403 Forbidden al abrir un proyecto
El navegador muestra «Access forbidden» porque la carpeta del proyecto carece de un archivo índice o porque los permisos bloquean la lectura. Comprueba que existe index.php o index.html, y en Linux asigna chmod -R 755 a la carpeta dentro de htdocs. Si trabajas con enlaces simbólicos, activa Options FollowSymLinks en la directiva <Directory> de httpd.conf.
phpMyAdmin devuelve el error 1045
El código 1045 indica credenciales rechazadas. Abre phpMyAdmin/config.inc.php y verifica que auth_type sea ‘cookie’ o ‘config’, y que user y password coincidan con los de MySQL. Si olvidaste la clave de root, detén MySQL, arranca con –skip-grant-tables, cambia la contraseña con ALTER USER y reinicia el servicio.
Errores de extensión y módulos no cargados
Mensajes como «PHP Startup: Unable to load dynamic library» al iniciar Apache apuntan a una extensión referenciada en php.ini que no existe o está comentada incorrectamente. Revisa que la línea extension=mysqli no tenga punto y coma delante y que la ruta extension_dir apunte a la carpeta ext real de tu instalación. Tras cualquier cambio en php.ini, reinicia Apache para que surta efecto.
Buenas prácticas para evitar futuros fallos
Ejecuta XAMPP como administrador en Windows, evita instalar en rutas con espacios o acentos, y detén los servicios antes de apagar el equipo para que InnoDB cierre limpiamente. Mantén copias de htdocs y de las bases de datos con mysqldump. Con estas rutinas, los errores dejan de ser crisis y pasan a ser simples incidencias controladas.