- Accueil
- Documentation
- Fichiers, dossiers et adresses
Fichiers, dossiers et adresses
Sommaire
- L'arborescence du dossier eclair
- Comment une page est-elle servie ?
- Que contient le dossier data ?
- Les dossiers cache et media
- cache/
- media/
- Que mettre dans eclair-config.php ?
- Les règles du .htaccess expliquées
- La configuration Nginx
- Quels droits donner aux fichiers et dossiers ?
- Quels fichiers et dossiers sauvegarder ?
- Les adresses générées par Éclair
- Les adresses des contenus
- Questions fréquentes sur les fichiers
Sommaire
- L'arborescence du dossier eclair
- Comment une page est-elle servie ?
- Que contient le dossier data ?
- Les dossiers cache et media
- cache/
- media/
- Que mettre dans eclair-config.php ?
- Les règles du .htaccess expliquées
- La configuration Nginx
- Quels droits donner aux fichiers et dossiers ?
- Quels fichiers et dossiers sauvegarder ?
- Les adresses générées par Éclair
- Les adresses des contenus
- 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 ?

- Toute demande de page arrive sur
index.php; les images, CSS et scripts sont servis directement par le serveur. Pour une lecture (GETouHEAD),index.phplitcache/runtime.php: cache actif, date d'expiration, domaine et HTTPS exigés. - 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éponse304 Not Modified. - Sinon,
app/bootstrap.phpdémarre l'application : il vérifie la version de PHP, liteclair-config.phps'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 dossier | Contenu | Dans la sauvegarde ZIP |
|---|---|---|
site.php | Tous les réglages des onglets de Réglages | Oui |
users.php | Comptes, empreintes des mots de passe, double authentification | Oui |
keys.php | Clés secrètes créées à l'installation (secret du site, clé IndexNow) | Oui |
vault.php | Clés d'API de l'assistant IA, chiffrées | Non |
index.php | Résumé de tous les contenus, pour lister et trouver une adresse vite | Oui |
content/ | Un fichier par page, article ou produit | Oui |
revisions/ | Les 20 dernières versions de chaque contenu | Oui |
search.php | Texte des contenus pour la recherche du site | Oui |
media.php | Registre de la médiathèque : fichiers, dimensions, textes alternatifs | Oui |
categories.php, menus.php, redirects.php | Catégories, menus et redirections | Oui |
custom-css.php | Ton CSS personnalisé | Oui |
inbox.php et messages/ | Boîte de réception du formulaire, 500 messages au plus | Oui |
indexnow.php | Date et résultat du dernier envoi IndexNow | Oui |
logs/ | Journal de sécurité et erreurs techniques, 1 Mo au plus chacun | Oui |
sessions/ | Sessions ouvertes, sous un nom haché | Non |
limits/ | Compteurs anti-bruteforce et anti-spam | Non |
ai/ | Dépenses, conversations (30 par personne), propositions, annulations, connexions MCP | Non |
install-window.php | Début de la fenêtre d'installation de 2 heures, supprimé à la fin de l'installation | Sans objet |
reset.php | Secours « mot de passe oublié », créé par toi, supprimé automatiquement | Non |
Les dossiers cache et media
cache/
| Élément | Rôle |
|---|---|
runtime.php | Ré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-….zip | Sauvegarde 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ément | Rôle |
|---|---|
2026/11/… | Images envoyées, rangées par année et par mois |
photo.jpg, .png, .webp ou .gif | L'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.webp | Dé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.jpg | Image de partage en 1200 × 630, créée à la première utilisation |
site/icon-32.png, icon-180.png, icon-192.png, icon-512.png | Icô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');
| Constante | Effet | Précaution |
|---|---|---|
ECLAIR_DEBUG | Affiche le détail des erreurs | Coupe aussi le cache statique : supprime la ligne une fois le problème réglé |
ECLAIR_DATA | Range les données à un autre emplacement (chemin absolu) | Déplace d'abord data/, et pense à sauvegarder ce nouvel emplacement |
ECLAIR_SECRET | Ajoute 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]
RewriteBase /reste en commentaire : décommente-la seulement si ton hébergeur l'exige, ce qui est rare.- Les deux lignes
Authorizationtransmettent à PHP l'en-tête d'autorisation que certains hébergements retirent. Le connecteur MCP en a besoin. app/,data/etcache/répondent 404 depuis le web.- Les fichiers cachés (
.git,.env…) répondent 404, sauf le dossier.well-known. - Aucun script PHP ne s'exécute en dehors d'
index.php. - 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; }
- Les deux premières règles ferment les dossiers internes et les fichiers cachés, sauf
.well-known. - Le bloc
/media/refuse scripts, pages HTML, SVG et XML, et met les fichiers en cache un an. try_filesenvoie versindex.phptout ce qui n'est pas un fichier existant.- Seul
index.phpest confié à PHP-FPM : adaptefastcgi_passau socket de ton serveur. - Pour que l'assistant IA affiche ses réponses au fil de l'eau, ajoute
fastcgi_buffering off;dans le bloc PHP.
HTTPS, proxy et CDN sont traités dans Nginx, VPS, proxy et CDN.
Quels droits donner aux fichiers et dossiers ?
- PHP doit pouvoir écrire dans
data/,cache/etmedia/. L'assistant d'installation vérifie chacun (« Dossier « data » accessible en écriture ») et, en cas d'échec, conseille de donner les droits d'écriture (755) par FTP. - Éclair crée ensuite ses fichiers de données en 0600 (lisibles par le seul compte qui exécute PHP), ses sous-dossiers de
data/et decache/en 0700, et ceux demedia/en 0755. - Évite les droits 777, qui laissent n'importe quel compte du serveur écrire. Si 755 ne suffit pas, demande à ton hébergeur sous quel compte s'exécute PHP.
Quels fichiers et dossiers sauvegarder ?
| À sauvegarder | Pourquoi | Comment |
|---|---|---|
data/ | Contenus, réglages, comptes, CSS personnalisé | Sécurité › Télécharger une sauvegarde, ou FTP |
media/ | Images, icônes, police de titre | Même sauvegarde ZIP, ou FTP |
eclair-config.php | Si tu en as créé un | FTP |
Gabarits modifiés dans app/theme/ | Une mise à jour les remplace | FTP, avant chaque mise à jour |
Dossier désigné par ECLAIR_DATA | Si tu as déplacé tes données | FTP |
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.

La procédure de mise à jour complète est dans Sécurité avancée et maintenance.
Les adresses générées par Éclair
| Adresse | Contenu | Quand elle existe |
|---|---|---|
/sitemap.xml | Plan du site avec images et versions linguistiques | Toujours ; vide si le site est masqué aux moteurs |
/robots.txt | Règles des robots, dont 30 robots d'IA, et lien du sitemap | Toujours |
/llms.txt | Carte du site pour les IA | Option Publier /llms.txt |
/llms-full.txt | Tout le contenu en Markdown | Options /llms.txt et /llms-full.txt |
/feed.xml | Flux RSS des 20 derniers articles, texte complet | Blog activé |
/products.xml | Flux produits pour Google Merchant Center | Boutique ouverte |
/ma-page.md, /index.md | Version Markdown d'une page, en noindex avec son URL canonique | Option Version Markdown de chaque page, sauf pages en noindex |
/favicon.ico | Icône de 32 px | Dès que l'icône du site existe |
/recherche?q=… | Résultats de la recherche, en noindex | Option Recherche sur le site |
/<clé>.txt | Preuve de propriété IndexNow | IndexNow activé |
/_eclair/mcp | Connecteur MCP | Autoriser les connexions MCP |
/_eclair/oauth/authorize, /token, /register | Autorisation OAuth du connecteur | Même condition |
/.well-known/oauth-protected-resource, /.well-known/oauth-authorization-server, /.well-known/openid-configuration | Découverte OAuth | Même condition |
/_eclair/contact | Réception du formulaire de contact | Toujours |
/_eclair/edit/<id> | Bouton ✏️ Modifier du site, vers l'éditeur | Personnes connectées |
/__eclair/ping | Test de la réécriture et vérification de l'adresse du site | Toujours |
Les adresses des contenus
| Contenu | Adresse 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 |
| Administration | L'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.