autoloader

Solved by Fred · 24 Feb 2026 10:38
Avatar
Posts 9

Bonjour

Je suis en cours de test de flatboard sur un serveur caddy, j'ai demandé à L'IA de m'aider pour définir les directives à mettre dans caddyfile pour remplacer les htaccess d'apache.
Et en construisant ces directives, L'IA me signale un potentiel bug, comme j'avais de nombreuses erreurs 500, voir ci-dessous
Je ne sais pas si c'est justifié, mais en ajoutant la ligne ci-dessous, je n'avais plus ces erreurs 500.
Quelqu'un d'entre vous aurait-il un fichier caddyfile pour Flatboard, car celui construit par IA ne semble pas parfait ?
Quels sont les fichiers / répertoires à protéger en lecture ?
Merci au développeur pour ce cms très facile d'accès / conviviale

Voilà le problème ! Autoloader::register(BASE_PATH) n'est jamais appelé dans api.php. L'autoloader est chargé mais pas enregistré, donc PHP ne sait pas comment trouver les classes.
Il faut ajouter l'appel à register() juste après le require_once. Edite le fichier :
bash
sudo nano /var/www/flatboard/public/api.php
Trouve cette partie :

PHP
// Charger l'autoloader
require_once BASE_PATH . '/app/Core/Autoloader.php';
// Initialiser l'application en mode API

Et modifie-la en :

PHP
// Charger l'autoloader
require_once BASE_PATH . '/app/Core/Autoloader.php';
Autoloader::register(BASE_PATH);
// Initialiser l'application en mode API

Sauvegarde puis reteste :

SH
curl -v http://192.168.1.206/api/notifications 2>&1 | grep "HTTP\|error\|Error"

C'est probablement un bug dans le code source de Flatboard — index.php doit appeler register() lui mais api.php a été oublié. Tu peux le signaler au développeur sur le dépôt du projet.

Edited on Feb 22, 2026 By Fred .

  • api french Résolu
Avatar
Posts 344

Bonjour @bruno29900, et merci pour le rapport détaillé et bien documenté !

Tu as trouvé un vrai bug. public/api.php chargeait bien le fichier de l'autoloader mais n'appelait jamais Autoloader::register(BASE_PATH) — PHP n'avait donc aucun gestionnaire SPL pour résoudre les classes et chaque requête API plantait immédiatement en 500. Ce bug s'est introduit lors de la refactorisation qui a extrait la logique d'initialisation dans un bootstrap.php partagé : index.php a été migré pour l'utiliser, mais api.php a été oublié et a continué à réimplémenter cette logique en ligne, de façon incomplète. index.php n'était donc pas affecté car il passe bien par bootstrap.php, qui appelle correctement register().

Le correctif est inclus dans Flatboard 5.0.6 : api.php délègue désormais à bootstrap.php de la même façon qu'index.php, ce qui supprime au passage une trentaine de lignes de code dupliqué.

Concernant ta configuration Caddy : les erreurs 500 que tu rencontrais étaient causées par ce bug PHP, pas par Caddy. Ta config était très probablement correcte. Les directives essentielles pour Flatboard sous Caddy sont les suivantes :

CADD
ton-domaine.com {
    root * /var/www/flatboard
    php_fastcgi unix//run/php/php8.x-fpm.sock
    file_server

    # Redirige toutes les requêtes vers index.php
    try_files {path} /index.php?{query}

    # Bloque les répertoires sensibles
    @protected path /stockage/* /app/* /vendor/*
    respond @protected 403
}

Si tu veux corriger manuellement pour tester le fix, remplace tout contenu du fichier public/api.php par :

PHP

<?php
/*
 * Project name: Flatboard 5
 * Project URL: https://flatboard.org
 * Author: Frédéric Kaplon and contributors
 * All Flatboard code is released under the GPL3 license.
 *
 * Flatboard 5 - Point d'entrée API REST
 */

// Définir les chemins de base
define('BASE_PATH', dirname(__DIR__));
define('PUBLIC_PATH', __DIR__);
define('API_MODE', true);

// ============================================================================
// BOOTSTRAP COMMUN (logs, constantes, autoloader PSR-4)
// Identique à public/index.php — évite la duplication et garantit que
// Autoloader::register() est bien appelé.
// ============================================================================
require_once BASE_PATH . '/bootstrap.php';

// Headers API
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-API-Token');

// Gérer les requêtes OPTIONS (CORS preflight)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

// ============================================================================
// INITIALISATION DE L'APPLICATION EN MODE API
// ============================================================================
try {
    $app = new \App\Core\App();
    $app->runApi();
} catch (\Exception $e) {
    http_response_code(500);
    echo json_encode([
        'error'   => true,
        'message' => 'Une erreur est survenue',
        'details' => DEBUG ? $e->getMessage() : null
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

    // Logger l'erreur
    $logFile = BASE_PATH . '/stockage/logs/php-errors.log';
    $errorMsg = sprintf(
        "[%s] API ERROR: %s\nStack trace:\n%s\n\n",
        date('Y-m-d H:i:s'),
        $e->getMessage(),
        $e->getTraceAsString()
    );
    @file_put_contents($logFile, $errorMsg, FILE_APPEND | LOCK_EX);
}

Merci encore d'avoir pris le temps de signaler ça !
Ps j'ai éditer ton message pour ajouter des tags et les blocs de code adapté ;)

Edited on Feb 26, 2026 By Fred .

Avatar
Posts 9

Fred

Bonsoir, je n'ai fait que remonter le bug trouvé par L'IA (Claude), ça fait quelques jours que je teste l'IA et j'ai des résultats plutôt satisfaisant sur du code. Je suis bluffé, ça permet d'apprendre en même temps avec ces réponses précises.
Je suis également ravi de flatboard, les fonctions essentielles pour un forum sont présentes.
Je continue mes tests sur mon serveur local.
Bonne soirée.

Avatar
Posts 344

@bruno29900 Peux-tu me confirmer que le correctif que j’ai publié résout bien le problème d’appel à l’API ?

Avatar
Posts 9

Fred

Bonjour Fred
À ce jour, après avoir remplacé le code par celui-ci dessus, je n'ai plus d'erreur (500),
Configuration :Caddy + PHP4

Avatar
Posts 344

Parfait !
Merci pour ton retour 😊
Le correctif sera disponible dans la prochaine version.

Je passe la discussion en résolue.

Visitor, reply to this topic…
Log in to reply
Navigation
6Posts
post #1
22 Feb 2026
ByUtilisateur