# L'environnement de developpement

## Demarrer

```
php dev/demarrer.php
```

Puis <http://localhost:8000>, avec les identifiants affiches par le lanceur.

## La base : deux voies, et le lanceur choisit

Il essaie **MariaDB portable** d'abord, **Docker** ensuite. Si aucun n'est la, il dit
exactement quoi faire.

### MariaDB portable — recommande

Ni installateur, ni service, ni droits d'administrateur.

1. telechargez `mariadb-10.6.x-winx64.zip` (~90 Mo) depuis <https://archive.mariadb.org/>,
   dossier `mariadb-10.6.x/winx64-packages/` ;
2. decompressez, renommez le dossier obtenu en `C:\dev\mariadb`
   (on doit trouver `C:\dev\mariadb\bin\mysqld.exe`) ;
3. `php dev/demarrer.php`.

Le lanceur initialise la base au premier appel, cree le compte applicatif, et lance le
serveur detache. Pour tout desinstaller : supprimez le dossier.

### Docker

`dev/docker-compose.yml` reste valable et sera repris automatiquement des que le demon
repondra. **MariaDB 10.6**, la version d'OVH mutualise : les deux moteurs divergent sur le
mode strict, la longueur des index et les dates nulles — tester sur l'un pour deployer sur
l'autre reviendrait a verifier autre chose que ce qu'on livre.

## Ce que fait le lanceur

1. lit `dev/config.local.php` ;
2. leve la base, puis **verifie que l'application peut s'y connecter** — « le serveur
   ecoute » et « la connexion applicative marche » sont deux choses, et les confondre donne
   une erreur PDO trois etapes plus loin, au milieu des migrations, ou elle ressemble a un
   defaut de migration ;
3. applique les migrations ;
4. pose un jeu d'essai si la base est vide ;
5. sert l'application avec le serveur integre de PHP.

## Arreter, repartir a neuf

```
# Portable
supprimez dev/donnees                              # base vierge au prochain lancement

# Docker
docker compose -f dev/docker-compose.yml down      # arrete, garde les donnees
docker compose -f dev/docker-compose.yml down -v   # efface tout

# Les deux
php dev/jeu_dessai.php --forcer                    # repose le jeu d'essai
```

---

## Trois choses a savoir

### 1. Le depot est synchronise en FTP vers la production

Tout fichier pose ici part sur <https://mongietourmalet.fr>. Y compris ce dossier.

C'est pourquoi la configuration locale n'est **jamais** choisie sur la foi de sa presence.
Elle ne l'est que si la variable `CONCIERGERIE_ENV` vaut `local` — variable que seul
`dev/demarrer.php` pose, et qui ne peut pas apparaitre sur le mutualise. Voir
`src/Support/Environnement.php`, qui explique pourquoi la regle n'est pas « le fichier
existe » : elle aurait suffi en developpement et fait tomber le site en production.

**A configurer de votre cote** : excluez de la synchronisation FTP
`dev/`, `tests_*.php`, `verifier.php` et `_comparaison_design/`. Ce sont des outils de
developpement ; ils n'ont rien a faire sur un serveur public, et certains sont directement
executables par une requete HTTP selon la racine web configuree.

> **`dev/donnees` avant tout le reste.** C'est le dossier de donnees de MariaDB : plusieurs
> centaines de mega-octets de fichiers binaires, reecrits en permanence pendant que le
> serveur tourne. Une synchronisation FTP le televerserait en continu, saturerait le
> mutualise, et enverrait sur un serveur public une copie integrale de la base locale. Si
> votre outil ne sait exclure qu'un seul chemin, que ce soit celui-la.

### 2. Le php.ini

Cette machine n'avait **aucun** `php.ini` charge. Il en existe un desormais dans
`C:/dev/PHP/php.ini`, qui active `mbstring`, `gd`, `pdo_mysql`, `curl`, `openssl`, `exif` et
`fileinfo`. Sans lui, aucune connexion a une base n'etait possible — et les outils de
verification tournaient sans la moitie de leurs extensions sans le dire.

Ce fichier est **hors du depot** : il ne part pas en production, et le supprimer suffit a
revenir en arriere.

### 3. Rien n'est envoye par courriel en local

La machine n'a pas de relais SMTP. Les liens d'activation et de reinitialisation se lisent
dans la file d'envoi, pas dans une boite aux lettres. L'adresse `url` de
`dev/config.local.php` vaut `http://localhost:8000` : sans elle, un lien d'activation lu en
local pointerait vers le site de production, et l'on activerait un vrai compte en croyant
tester.
