# Notes de développement ## Structure du projet (serveur) ``` /var/www/lan.acegrp.varlog/ ├── public/ │ ├── index.php # Point d'entrée │ ├── route.php # Routeur (actions GET/POST) │ └── assets/ # CSS, JS, uploads ├── templates/ # Vues PHP (incluses via extract() + include) │ ├── layout.php │ ├── post_form.php │ └── post_view.php ├── src/ │ ├── db.php # Connexion PDO PostgreSQL │ ├── PostManager.php │ └── FileManager.php ├── config/ │ └── config.php # Charge .env, définit les constantes DB └── docs/ ``` ## Conventions templates Les templates reçoivent leurs variables via `extract()` depuis `route.php`. Toute variable optionnelle (non transmise dans tous les contextes) doit utiliser `??` pour éviter un `Undefined variable` warning : ```php // Bon $dateValue = $published_at ?? date('Y-m-d\TH:i'); // À éviter // Warning si create (pas d'édition) ``` ## Permissions serveur PHP-FPM tourne en `www-data`. Les fichiers sensibles (`.env`) appartiennent à `cedrix:www-data 640`. Voir `PROJET.md` § Permissions serveur. ## Configuration PHP-FPM recommandée Sur un serveur 2 GB RAM, chaque worker PHP-FPM consomme ~40 MB. Pool recommandé (`/etc/php/8.3/fpm/pool.d/.conf`) : ```ini pm = dynamic pm.max_children = 20 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 8 ``` Symptôme de saturation : `server reached pm.max_children` dans `/var/log/php8.3-fpm.log`. ## Protection contre les bots (anciennes URLs DokuWiki) Les anciens sites migrés depuis DokuWiki reçoivent du trafic de bots sur `/lib/`, `/doku.php`, etc. Utiliser `RedirectMatch 410` dans Apache plutôt que `Require all denied` — le 410 "Gone" est un signal définitif qui pousse les moteurs à retirer ces URLs de leur index. ```apache # Dans le VirtualHost RedirectMatch 410 "^/(lib|doku\.php|feed\.php|install\.php|_media|_detail)(/.*)?$" ``` Un 403 ("accès refusé") est ignoré par les bots sérieux qui continuent de réessayer. Un 410 ("disparu définitivement") les fait arrêter.