# Coaster World DATA — correctif sauvegarde MySQL / ZIP

Date : 2 octobre 2026. À appliquer à Coaster World DATA v1.0.0, après le correctif PHP/Laragon déjà installé.

## Problème corrigé

Le serveur contient plusieurs bases MySQL. L'ancienne sauvegarde énumérait les tables de toutes les bases accessibles, puis essayait de les compter dans `coaster_world_data`. Cela provoquait l'erreur `achievement_translations doesn't exist`, bien que cette table appartienne à un autre site.

La liste des tables et les comptages utilisent désormais uniquement la connexion et le schéma DATA courants. L'archive SQL continue de cibler cette même base MySQL.

La capture montre également que `pdo_mysql` est chargé, mais que `zip` ne l'est pas. Le correctif vérifie ZIP avant tout accès à la base ou création de fichier et fournit une instruction explicite si l'extension manque. Il reste nécessaire d'activer cette extension dans PHP sur le serveur.

L'erreur `data_tasks doesn't exist` concerne une table ajoutée par les migrations v1.0.0. La mise à jour n'a pas encore pu les lancer, car la sauvegarde préalable a échoué. Terminer UPDATE_DATA.bat créera cette table.

## 1. Copier le correctif

Extraire le contenu du ZIP dans :

```text
C:\laragon\www\coaster-world-data
```

Accepter le remplacement des trois fichiers PHP. Le dossier `app` du ZIP doit se superposer au dossier `app` existant, sans créer un second dossier `coaster-world-data` à l'intérieur du premier.

Fichiers PHP remplacés :

- `app/Services/Operations/BackupService.php`
- `app/Console/Commands/CreateDataBackup.php`
- `tests/Feature/DataBackupTest.php`

Le ZIP ne contient aucun `.env`, aucune base de données ni aucun fichier de stockage. Conserver le `.env` et l'APP_KEY existants. La connexion reste celle de la base MySQL DATA configurée sur le serveur.

## 2. Activer ZIP dans le bon PHP

Ouvrir le terminal Laragon en mode CMD/Cmder, puis copier :

```bat
cd /d C:\laragon\www\coaster-world-data
set "PATH=C:\laragon\bin\php\php-8.3.16-Win32-vs16-x64;%PATH%"
php --ini
```

Le chemin PHP correspond à celui indiqué par UPDATE_DATA.bat dans la capture. Si la version PHP est changée ultérieurement, adapter le chemin.

Ouvrir dans un éditeur le fichier indiqué sur la ligne `Loaded Configuration File` de `php --ini`. Rechercher :

```ini
;extension=zip
```

Retirer le point-virgule pour obtenir :

```ini
extension=zip
```

Si la directive est absente, ajouter `extension=zip` une seule fois dans la section des extensions. Enregistrer `php.ini`.

Dans le même terminal, vérifier :

```bat
php -m | findstr /I "pdo_mysql zip"
```

Le résultat doit contenir ces deux lignes :

```text
pdo_mysql
zip
```

Chaque nouvelle commande PHP CLI recharge `php.ini`. Redémarrer aussi Apache/Nginx depuis Laragon pour que le site web charge l'extension ZIP. Si une erreur de chargement PHP apparaît ou si `zip` manque toujours, corriger cette activation avant de continuer.

## 3. Terminer la mise à jour

Dans le même terminal, à la racine du projet :

```bat
STOP_DATA.bat
php artisan down
php artisan config:clear
UPDATE_DATA.bat
```

UPDATE_DATA.bat doit d'abord afficher une sauvegarde JSON avec `"verified": true`, puis exécuter les migrations et l'installation. La sauvegarde se trouve dans `storage\app\private\data-backups`.

Attendre que la mise à jour se termine sans erreur. Ensuite :

```bat
php artisan up
START_DATA.bat
```

Le correctif PHP/Laragon précédent reste installé ; ce ZIP concerne seulement la sauvegarde.

## Vérification après installation

- [ ] `pdo_mysql` et `zip` sont affichés par la commande de vérification.
- [ ] UPDATE_DATA.bat produit une sauvegarde avec `"verified": true`.
- [ ] La mise à jour se termine sans erreur.
- [ ] La page d'administration des opérations s'ouvre sans erreur `data_tasks`.
- [ ] Les données DATA existantes sont toujours accessibles.

## Validation du correctif

- Avant correction, le nouveau test reproduit exactement l'erreur MySQL : une table `achievement_translations` créée dans une autre base était recherchée à tort dans DATA.
- Après correction, 3 tests de sauvegarde/restauration réussissent sur MariaDB 10.11.14 avec le pilote Laravel `mysql` : 19 assertions.
- Le test restaure dans une base isolée, vérifie les données DATA et confirme que la table de l'autre base n'est pas importée ni modifiée.
- Le contrôle des sommes SHA-256 et le rejet d'une sauvegarde corrompue restent fonctionnels.
- Avec ZIP désactivé et la base volontairement inaccessible, la création et la vérification de sauvegarde signalent ZIP manquant avant tout accès à la base, sans créer de fichier temporaire ni d'archive.
- Syntaxe PHP et formatage Laravel Pint vérifiés sur les trois fichiers modifiés.

Les tests ont été exécutés sur des bases de test dédiées. Aucune commande de test n'est nécessaire pour installer ce correctif. Les scripts BAT ne peuvent pas être exécutés nativement dans l'environnement Linux de validation ; leur lancement PHP sous Windows a été confirmé par les captures du serveur.

## Changelog

- Limitation explicite de l'énumération des tables au schéma courant.
- Comptages effectués sur la même connexion que l'énumération.
- Contrôle de ZIP avant création/vérification d'une sauvegarde.
- Message CLI clair pour activer ZIP et indication du journal pour les autres erreurs.
- Ajout d'un test de régression MySQL avec plusieurs bases.
