# Herramienta de diagnóstico para WordPress

Aplicación PHP autónoma y de solo lectura para investigar instalaciones de WordPress que no cargan. Se sube por FTP, funciona sin ejecutar WordPress y genera un informe con pruebas, causas probables y soluciones manuales.

## Qué diagnostica

- entorno PHP, memoria, disco y extensiones;
- estructura y archivos esenciales;
- integridad del núcleo para las versiones incluidas en `rules/core`;
- `wp-config.php`, modo mantenimiento y reglas básicas de `.htaccess`;
- errores fatales de `debug.log` y registros locales;
- sintaxis de archivos PHP de carga, sin ejecutarlos;
- conexión MySQL, tablas esenciales, dominio, plugins activos y tema;
- incoherencias frecuentes después de una migración.

No es un escáner completo de malware y no repara archivos o datos.

## Instalación por FTP

1. Descomprime el ZIP en tu equipo.
2. Copia `config.example.php` como `config.php`.
3. Sustituye el token de ejemplo por un valor aleatorio exclusivo de al menos 32 caracteres; se recomiendan 48.
4. Sube toda la carpeta dentro de la raíz de WordPress, por ejemplo como `wp-diagnostico`.
5. Abre `https://tu-dominio.example/wp-diagnostico/`.
6. Introduce el token y confirma la instalación configurada.
7. Ejecuta el análisis, descarga el informe si lo necesitas y borra sus resultados.
8. Elimina toda la carpeta del servidor mediante FTP al terminar.

La herramienta examina una única instalación: la ruta exacta definida como `allowed_root`. Si se omite, usa la carpeta inmediatamente superior a la herramienta. La ruta solo puede cambiarse mediante FTP; la interfaz no busca ni enumera otras instalaciones.

La primera autorización correcta abre una activación absoluta de dos horas. La actividad no la prolonga. Cuando caduque, elimina `var/activation.php`, cambia el token de `config.php` por uno nuevo y vuelve a autorizar. Al terminar, elimina toda la carpeta de la herramienta.

### Uso excepcional por HTTP

HTTPS es el modo normal. Si un sitio roto no puede ofrecerlo, se muestra una explicación para activar temporalmente por FTP:

```php
'allow_insecure_http' => true,
'allowed_ips' => array('TU_IP_PUBLICA'),
```

Este modo dura como máximo 30 minutos, exige una IP exacta, no admite credenciales manuales y no permite exportar informes. HTTP no cifra el token ni el contenido; úsalo solo como último recurso y desactívalo inmediatamente después.

## Base de datos

La herramienta lee `wp-config.php` como texto y reconoce únicamente valores literales de `DB_NAME`, `DB_USER`, `DB_PASSWORD`, `DB_HOST` y `$table_prefix`. Nunca incluye ni ejecuta ese archivo.

Si la configuración usa variables de entorno o lógica personalizada, bajo HTTPS puede introducirse una conexión manual para esa sesión. Se cifra mientras espera su fase de análisis y se elimina al terminarla, incluso si falla. La capa de base de datos rechaza cualquier consulta que no comience por `SELECT` y también rechaza consultas múltiples.

## Requisitos

- PHP 7.4 o superior;
- extensión `session`;
- extensión `openssl` para usar credenciales manuales;
- `mysqli` para comprobar la base de datos;
- permisos de lectura sobre la instalación;
- HTTPS, salvo el modo de emergencia explícito y restringido.

No necesita Composer, Node, SSH ni acceso de administración a WordPress.

## Seguridad

La herramienta trata todos los archivos inspeccionados como hostiles, no ofrece un explorador de archivos y solo muestra fallos accionables con evidencias normalizadas. Las exportaciones requieren HTTPS, POST y un token CSRF. Aun así, un servidor ya comprometido puede alterar cualquier herramienta que se ejecute en él. Consulta [SECURITY.md](SECURITY.md).

## Desarrollo

```bash
php tests/run.php
find . -name '*.php' -not -path './dist/*' -print0 | xargs -0 -n1 php -l
bash tools/build-zip.sh
php tools/verify-package.php dist/wordpress-diagnostic-tool-0.2.0.zip
```

Licencia GPL-2.0-or-later.
