Fichiers, dossiers et adresses

Sommaire
  1. L'arborescence du dossier eclair
  2. Comment une page est-elle servie ?
  3. Que contient le dossier data ?
  4. Les dossiers cache et media
  5. cache/
  6. media/
  7. Que mettre dans eclair-config.php ?
  8. Les règles du .htaccess expliquées
  9. La configuration Nginx
  10. Quels droits donner aux fichiers et dossiers ?
  11. Quels fichiers et dossiers sauvegarder ?
  12. Les adresses générées par Éclair
  13. Les adresses des contenus
  14. Questions fréquentes sur les fichiers

Éclair n'a pas de base de données : tout ce qui fait ton site vit dans des fichiers et dossiers que tu peux voir par FTP. Cette référence décrit l'arborescence, le rôle de chaque fichier de data/, les réglages d'eclair-config.php, les règles du .htaccess et de Nginx, les droits à donner, ce qu'il faut sauvegarder et toutes les adresses que le site génère seul.

L'arborescence du dossier eclair

C'est le contenu de ce dossier que tu envoies dans le dossier public de ton hébergement (public_html, www…).

eclair/
├── index.php                  contrôleur frontal : sert le cache sans charger l'application
├── .htaccess                  réécriture, protections, compression, cache navigateur
├── eclair-config.exemple.php  modèle des réglages avancés facultatifs
├── app/                       le code d'Éclair (jamais accessible depuis le web)
│   ├── bootstrap.php          démarrage : version de PHP, eclair-config.php, chargement
│   ├── manifest.php           empreintes d'origine pour le contrôle d'intégrité
│   ├── lib/                   classes : Content, Blocks, Seo, Analyzer, Media, Auth, Mcp…
│   ├── admin/views/           écrans de l'administration (.php.gz dans l'archive)
│   ├── install/               assistant d'installation et écran « Installation verrouillée »
│   ├── lang/                  traductions de l'administration (6 langues, JSON compressé)
│   └── theme/                 gabarits du site public, theme.css, themes/, directions.css
├── assets/
│   ├── admin/                 CSS et JavaScript de l'administration
│   └── site/site.js           le seul script du site public (1,2 Ko compressé)
├── data/                      contenus, réglages, comptes : jamais public
├── cache/                     pages générées : jamais public
└── media/                     images envoyées, icônes du site, police de titre

app/ et assets/ contiennent le code : une mise à jour les remplace. Tes données sont dans data/ et media/, que les mises à jour ne touchent jamais. L'archive officielle contient aussi, à côté du dossier eclair, les fichiers LISEZ-MOI.txt, LICENSE.txt et THIRD-PARTY-NOTICES.txt : inutile de les envoyer sur ton hébergement.

Comment une page est-elle servie ?

Cycle d'une requête : page servie depuis le cache statique ou générée par l'application
Le chemin rapide du cache statique
  1. Toute demande de page arrive sur index.php ; les images, CSS et scripts sont servis directement par le serveur. Pour une lecture (GET ou HEAD), index.php lit cache/runtime.php : cache actif, date d'expiration, domaine et HTTPS exigés.
  2. Si la page existe dans cache/pages/, elle est envoyée telle quelle, avec son ETag ; un navigateur qui l'a déjà reçoit une réponse 304 Not Modified.
  3. Sinon, app/bootstrap.php démarre l'application : il vérifie la version de PHP, lit eclair-config.php s'il existe, puis aiguille vers l'installation, l'administration, le formulaire, le connecteur MCP ou le site. La page générée est mise en cache pour les visites suivantes.

Le détail du code est dans L'architecture d'Éclair.

Que contient le dossier data ?

Chaque fichier de data/ est un fichier .php qui commence par la ligne <?php exit; ?>, suivie de données JSON. Même si un serveur ignorait les .htaccess, l'ouvrir dans un navigateur n'afficherait rien. Les écritures sont atomiques (fichier temporaire, puis renommage) et les fichiers sont privés.

Fichier ou dossierContenuDans la sauvegarde ZIP
site.phpTous les réglages des onglets de RéglagesOui
users.phpComptes, empreintes des mots de passe, double authentificationOui
keys.phpClés secrètes créées à l'installation (secret du site, clé IndexNow)Oui
vault.phpClés d'API de l'assistant IA, chiffréesNon
index.phpRésumé de tous les contenus, pour lister et trouver une adresse viteOui
content/Un fichier par page, article ou produitOui
revisions/Les 20 dernières versions de chaque contenuOui
search.phpTexte des contenus pour la recherche du siteOui
media.phpRegistre de la médiathèque : fichiers, dimensions, textes alternatifsOui
categories.php, menus.php, redirects.phpCatégories, menus et redirectionsOui
custom-css.phpTon CSS personnaliséOui
inbox.php et messages/Boîte de réception du formulaire, 500 messages au plusOui
indexnow.phpDate et résultat du dernier envoi IndexNowOui
logs/Journal de sécurité et erreurs techniques, 1 Mo au plus chacunOui
sessions/Sessions ouvertes, sous un nom hachéNon
limits/Compteurs anti-bruteforce et anti-spamNon
ai/Dépenses, conversations (30 par personne), propositions, annulations, connexions MCPNon
install-window.phpDébut de la fenêtre d'installation de 2 heures, supprimé à la fin de l'installationSans objet
reset.phpSecours « mot de passe oublié », créé par toi, supprimé automatiquementNon

Les dossiers cache et media

cache/

ÉlémentRôle
runtime.phpRéglages du chemin rapide : cache actif, expiration au prochain article programmé, domaine et HTTPS exigés
pages/Une page générée par adresse, nommée d'après l'empreinte md5 de son chemin : une ligne d'en-têtes et d'ETag, puis le HTML
backup-….zipSauvegarde en cours de téléchargement, supprimée ensuite ; si le téléchargement a été interrompu, elle est effacée lors d'un vidage du cache, une heure plus tard au moins

Le cache se vide tout seul à chaque modification, et à l'heure prévue pour un article programmé. Pour le vider à la main : Réglages › Avancé › Vider le cache.

media/

ÉlémentRôle
2026/11/…Images envoyées, rangées par année et par mois
photo.jpg, .png, .webp ou .gifL'image ré-encodée, 2 000 px de large au plus, sans données EXIF ni GPS (avec l'extension GD)
photo-480.webp à photo-1600.webpDéclinaisons WebP en 480, 800, 1200 et 1600 px (seulement celles plus petites que l'original), plus une version WebP à la taille de l'image
photo-og.jpgImage de partage en 1200 × 630, créée à la première utilisation
site/icon-32.png, icon-180.png, icon-192.png, icon-512.pngIcônes du site : favicon et écran d'accueil des mobiles
fonts/Police de titre de ta direction artistique (.woff2), téléchargée une fois

Le fichier media/.htaccess n'autorise que des images : pas de script, de page HTML, de SVG ni de liste de fichiers, avec une politique de sécurité qui interdit tout contenu actif. Les envois sont détaillés dans Images et médiathèque.

Que mettre dans eclair-config.php ?

Ce fichier facultatif se place à côté d'index.php. Copie eclair-config.exemple.php sous le nom eclair-config.php, puis décommente ce dont tu as besoin. Il est lu au démarrage de l'application, avant tout le reste, et le contrôle d'intégrité ne le signale pas comme fichier inconnu.

<?php
defined('ECLAIR') || exit;

// Détail des erreurs, le temps de résoudre un problème :
// define('ECLAIR_DEBUG', true);

// Données hors du dossier public (déplace d'abord le dossier data) :
// define('ECLAIR_DATA', '/home/moncompte/eclair-data');

// Protection renforcée des clés d'API, à définir avant de les enregistrer :
// define('ECLAIR_SECRET', 'une-longue-phrase-secrète');
ConstanteEffetPrécaution
ECLAIR_DEBUGAffiche le détail des erreursCoupe aussi le cache statique : supprime la ligne une fois le problème réglé
ECLAIR_DATARange les données à un autre emplacement (chemin absolu)Déplace d'abord data/, et pense à sauvegarder ce nouvel emplacement
ECLAIR_SECRETAjoute une phrase secrète au chiffrement des clés d'APIÀ définir avant d'enregistrer tes clés ; ajoutée ou changée ensuite, elle oblige à les coller de nouveau

Le code reconnaît aussi deux constantes techniques absentes du guide officiel : ECLAIR_AI_ENDPOINTS (adresse de remplacement d'un service d'IA, pour une passerelle ou des tests) et ECLAIR_FONTS_URL (source des polices, Fontsource via cdn.jsdelivr.net par défaut). Ne les utilise que si tu sais pourquoi. ECLAIR_VERSION et ECLAIR_ROOT sont fixées par index.php.

Les règles du .htaccess expliquées

Le .htaccess d'Éclair fonctionne à la racine d'un domaine comme dans un sous-dossier. Il n'utilise que des directives autorisées sur les hébergements mutualisés : pas d'Options, pas de php_flag. Voici sa partie réécriture :

RewriteEngine On
# RewriteBase /
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^(app|data|cache)(/|$) - [R=404,L]
RewriteRule (^|/)\.(?!well-known/) - [R=404,L]
RewriteRule ^(?!index\.php$).*\.(php\d?|phtml|phar|inc)$ - [R=404,NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L,QSA]
  1. RewriteBase / reste en commentaire : décommente-la seulement si ton hébergeur l'exige, ce qui est rare.
  2. Les deux lignes Authorization transmettent à PHP l'en-tête d'autorisation que certains hébergements retirent. Le connecteur MCP en a besoin.
  3. app/, data/ et cache/ répondent 404 depuis le web.
  4. Les fichiers cachés (.git, .env…) répondent 404, sauf le dossier .well-known.
  5. Aucun script PHP ne s'exécute en dehors d'index.php.
  6. Tout ce qui n'est pas un fichier existant passe par index.php, même un dossier : aucune liste de fichiers n'est jamais affichée.

Le reste du fichier active la compression Brotli ou Gzip des pages HTML, des feuilles CSS, du JavaScript, des données JSON et XML, des flux RSS, des images SVG et du Markdown, un cache navigateur d'un an pour les images, les CSS, les scripts et les polices (Cache-Control: public, max-age=31536000, immutable), et déclare les types WebP, AVIF et WOFF2. Les dossiers app/, data/ et cache/ ont en plus leur propre .htaccess qui refuse tout accès : la protection est double.

La configuration Nginx

Nginx ignore les .htaccess : reproduis ces règles dans le bloc server de ton site. C'est la configuration donnée par le guide officiel.

location ~ ^/(app|data|cache)(/|$) { return 404; }
location ~ /\.(?!well-known/) { return 404; }
location ^~ /media/ {
    location ~* \.(php\d?|phtml|phar|s?html?|svgz?|xml|js)$ { return 404; }
    add_header X-Content-Type-Options nosniff;
    expires 1y;
}
location ~* \.(webp|avif|jpe?g|png|gif|ico|css|js|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; }
location / { try_files $uri /index.php$is_args$args; }
location = /index.php {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}
location ~ \.php$ { return 404; }

HTTPS, proxy et CDN sont traités dans Nginx, VPS, proxy et CDN.

Quels droits donner aux fichiers et dossiers ?

Quels fichiers et dossiers sauvegarder ?

À sauvegarderPourquoiComment
data/Contenus, réglages, comptes, CSS personnaliséSécurité › Télécharger une sauvegarde, ou FTP
media/Images, icônes, police de titreMême sauvegarde ZIP, ou FTP
eclair-config.phpSi tu en as créé unFTP
Gabarits modifiés dans app/theme/Une mise à jour les remplaceFTP, avant chaque mise à jour
Dossier désigné par ECLAIR_DATASi tu as déplacé tes donnéesFTP

La sauvegarde ZIP ne contient ni les clés d'API, ni les conversations et connexions MCP, ni les sessions. Après une restauration sur un autre serveur, colle de nouveau tes clés d'API et reconnecte Claude ou ChatGPT. Pour restaurer, remplace data/ et media/ par ceux de la sauvegarde (par FTP), puis vide le cache depuis l'administration.

Mise à jour : on remplace app et assets, on garde data et media
Ce qu'une mise à jour remplace et ce qu'elle garde

La procédure de mise à jour complète est dans Sécurité avancée et maintenance.

Les adresses générées par Éclair

AdresseContenuQuand elle existe
/sitemap.xmlPlan du site avec images et versions linguistiquesToujours ; vide si le site est masqué aux moteurs
/robots.txtRègles des robots, dont 30 robots d'IA, et lien du sitemapToujours
/llms.txtCarte du site pour les IAOption Publier /llms.txt
/llms-full.txtTout le contenu en MarkdownOptions /llms.txt et /llms-full.txt
/feed.xmlFlux RSS des 20 derniers articles, texte completBlog activé
/products.xmlFlux produits pour Google Merchant CenterBoutique ouverte
/ma-page.md, /index.mdVersion Markdown d'une page, en noindex avec son URL canoniqueOption Version Markdown de chaque page, sauf pages en noindex
/favicon.icoIcône de 32 pxDès que l'icône du site existe
/recherche?q=…Résultats de la recherche, en noindexOption Recherche sur le site
/<clé>.txtPreuve de propriété IndexNowIndexNow activé
/_eclair/mcpConnecteur MCPAutoriser les connexions MCP
/_eclair/oauth/authorize, /token, /registerAutorisation OAuth du connecteurMême condition
/.well-known/oauth-protected-resource, /.well-known/oauth-authorization-server, /.well-known/openid-configurationDécouverte OAuthMême condition
/_eclair/contactRéception du formulaire de contactToujours
/_eclair/edit/<id>Bouton ✏️ Modifier du site, vers l'éditeurPersonnes connectées
/__eclair/pingTest de la réécriture et vérification de l'adresse du siteToujours

Les adresses des contenus

ContenuAdresse sur un site en français
Page/ma-page, ou /parent/enfant pour une sous-page (4 niveaux au plus)
Accueil/ ; l'adresse propre de la page d'accueil redirige vers /
Article/blog/mon-article
Pages suivantes du blog/blog/page/2
Catégorie d'articles/blog/ma-categorie
Page auteur/blog/auteur/prenom-nom
Catalogue/boutique, puis /boutique/page/2
Catégorie de produits, produit/boutique/ma-categorie, /boutique/mon-produit
AdministrationL'adresse choisie à l'installation

Les mots des adresses suivent la langue du site : page en français et en anglais, pagina en espagnol, en italien et en portugais, seite en allemand ; auteur, autor, author ou autore ; recherche, buscar, search, suche, cerca ou pesquisa ; boutique, tienda, shop, negozio ou loja.

Une seule adresse par contenu : Éclair redirige en 301 les variantes en majuscules, avec barre oblique finale, doubles barres ou index.php, ainsi que http vers https quand HTTPS est forcé, et www ou sans www une fois l'adresse officielle vérifiée.

Certains mots sont réservés et ne peuvent pas servir d'adresse de page : app, data, cache, assets, media, index, admin, _eclair, __eclair, sitemap, robots, feed, llms, llms-full, favicon, wp-admin, wp-login, plus l'adresse de ton administration, celle du blog, le mot de la recherche et l'adresse de la boutique une fois configurée. Le SEO de ces adresses est détaillé dans Le SEO avec Éclair.

Questions fréquentes sur les fichiers

Puis-je supprimer le dossier cache ?

Ne supprime pas le dossier lui-même : il contient sa propre protection .htaccess. Utilise Réglages › Avancé › Vider le cache, qui efface seulement les pages générées ; elles se recréent à la visite suivante.

Où sont enregistrés mes articles ?

Dans data/content/, un fichier par contenu, avec leurs 20 dernières versions dans data/revisions/. Les images sont dans media/, rangées par année et par mois.

Peut-on placer le dossier data hors du dossier public ?

Oui, si ton hébergeur le permet : déplace le dossier data, puis indique son chemin absolu avec ECLAIR_DATA dans eclair-config.php. Ajoute ce nouvel emplacement à tes sauvegardes.