Configurar el vigilante de archivos
Primer registro: crear el estado de referencia
En el primer arranque no hay nada que comparar — en su lugar, la pasada crea el estado de referencia: para cada archivo una suma de comprobación (sha256 cuando PHP la trae, si no md5), además del tamaño, la hora de modificación y el ámbito. Esto se ejecuta en porciones, de fábrica hasta 400 archivos o 5 segundos por paso; puedes cerrar la ventana y continuar más tarde. En el primer registro no hay porcentaje, porque todavía nadie conoce el número total — se muestran los archivos leídos y los directorios pendientes. Importante de entrada: el vigilante memoriza lo que encuentra y lo da por bueno. Si no estás seguro del estado de la instalación, ejecuta antes la integridad de archivos (núcleo contra WordPress.org) y el escaneo de malware. Después de una mudanza o de una restauración, «Descartar el estado» es el camino limpio: todas las sumas de comprobación y los hallazgos desaparecen, y la siguiente pasada vuelve a registrarlo todo. Es irreversible.
Qué se comprueba — y qué no
Se comprueba el árbol a partir del directorio de WordPress. Si en tu alojamiento wp-content o el directorio de plugins están fuera, se añaden como raíz propia y reciben un prefijo propio en la vista. Una wp-config.php situada un nivel por encima de la instalación se incluye como archivo suelto con nombre y se comprueba la primera al comienzo de cada pasada — el directorio padre en sí no se recorre a propósito: en la mayoría de los alojamientos ahí hay instalaciones ajenas y copias de seguridad. De fábrica quedan excluidos el directorio de subidas y 15 patrones incorporados de caché, temporales y registros (entre otros wp-content/cache, wp-content/upgrade, node_modules, .git, *.log); puedes desactivar ambos interruptores, y entonces la pasada dura más y cada subida de imagen genera un hallazgo. Los patrones propios los añades en la lista de exclusiones: hasta 100 entradas, de 200 caracteres como máximo cada una. Un patrón sin barra afecta a cualquier tramo de ruta con ese nombre, un patrón con barra queda anclado en la raíz, y * vale dentro de un tramo. Un patrón que coincida con todas las rutas de ejemplo se rechaza — apagaría la vigilancia sin que se notara al mirar la lista. Al registrarlo se cuenta y se muestra cuántos archivos del estado actual quedan comprendidos. No se leen los archivos que superan el límite de tamaño (de fábrica 16 MB, ajustable de 1 a 512), los archivos ilegibles y todo lo que haya detrás de un enlace simbólico — estos casos aparecen como cifras propias en el resultado y expresamente no cuentan como «falta».
Leer los hallazgos y aplicarlos
Hay tres tipos: modificado, nuevo, falta. Por archivo aparece como mucho un hallazgo abierto en la lista, con la primera detección, la última detección y un contador. La comparación se hace contra el último estado confirmado, no contra la última pasada — por eso un hallazgo se mantiene hasta que lo aplicas. Si el contenido vuelve por sí solo a coincidir con el estado (actualización revertida, archivo restaurado), el hallazgo desaparece; un archivo nuevo ya notificado que vuelve a no estar se escribe con su ruta en el registro de actividad en lugar de borrarse en silencio. «Aplicar el estado» muestra antes qué ocurriría y trabaja luego en bloques de 500: los archivos modificados reciben su nueva suma de comprobación, los nuevos se añaden y los que faltan se retiran. En los archivos mismos no cambia nada — pero la suma de comprobación antigua desaparece, así que mira todo lo que no sepas explicar antes de pulsar. Para el archivado hay una exportación CSV con hasta 2000 hallazgos abiertos, incluidas la suma antigua y la nueva. Conviene que conozcas dos límites: por encima de 3000 hallazgos abiertos se sigue contando, pero ya no se guarda nada (la interfaz lo indica), y del historial se conservan los 500 hallazgos aplicados más recientes. Una pasada interrumpida no determina qué archivos faltan — para eso hace falta una ejecución completa.
Aviso inmediato en archivos delicados
Activado de fábrica. «Delicado» no significa aquí «importante», sino: quien pueda modificar ese archivo ejecuta código propio o llega a los datos de acceso. Son wp-config.php, las configuraciones del servidor (.htaccess, .htpasswd, .user.ini, php.ini, web.config), los drop-ins (db.php, object-cache.php, advanced-cache.php, sunrise.php y afines), los mu-plugins y los archivos PHP en sitios donde no debería haberlos: en el directorio de subidas, en la raíz de WordPress y en wp-content fuera de plugins y themes. Estos avisos salen al final de cada porción, no solo al final de la pasada — en una instalación grande, entre uno y otro pasan horas. El intervalo mínimo está de fábrica en 15 minutos (ajustable de 0 a 1440); lo que se acumule en ese tiempo se recoge y sale con el aviso siguiente, no se pierde nada. Un aviso enumera como mucho 200 entradas, el resto se indica como cifra. Al final de la pasada y al interrumpirla, el resto se vacía sin atender al intervalo. Comprueba el camino una vez con el aviso de prueba: te dice expresamente si wp_mail() ha aceptado o rechazado el mensaje — si llega a entregarse lo decide el servidor que hay detrás. Además puedes registrar patrones propios como delicados; los hallazgos abiertos se reclasifican al instante, para que la lista no muestre dos verdades.
Automatismo y calendario
De fábrica, la pasada solo se ejecuta cuando tú la inicias. Si activas el automatismo, eliges entre cada hora, dos veces al día, a diario (valor por defecto) y cada semana. La primera cita queda a propósito 5 minutos en el futuro, para que no arranque una pasada en mitad de tu trabajo en la administración. El cálculo parte del inicio de la última pasada, con 5 minutos de tolerancia — si no, una pasada larga se ejecutaría cada vez con menos frecuencia. El cron procesa esas mismas porciones y se reprograma cada 30 segundos mientras quede algo pendiente; si en ese momento conduces tú desde el navegador, espera 120 segundos y no toca el volante. Que haya dos conductores en el mismo encargo lo impide un token que va pasando con cada respuesta; el bloqueo caduca a los 60 segundos, para que un navegador cerrado de golpe no bloquee el encargo para siempre. Si en tu instalación está definida DISABLE_WP_CRON, el mensaje que ves al activarlo te dice que la pasada solo arranca cuando se llama a wp-cron.php desde fuera — es decir, cuando hay configurado un cronjob en el servidor.