Fichier Bootstrap PHP: Debug, Locale, Constantes, Autoload…

Lorsque vous faites une application PHP (site ou web app), il y a souvent les mêmes variables et fonctions génériques que vous reportez d’un projet à un autre.

Je vous propose ici mon bootstrap PHP (pour rappel en informatique générale un bootstrap est un petit programme d’amorçage, en PHP c’est le premier fichier qui est exécuté, il sert généralement à initialiser votre application).

1. Configuration PHP

En premier on paramètre PHP afin qu’il nous affiche que les erreurs critiques, et travail avec des dates en français (les dates uniquement, le faire sur le nombre par exemple peut être risqué car tous vos nombres décimaux seront formatés avec une virgule, que ni PHP, ni MySQL n’apprécierons pour faire des calculs ou des requêtes…), et une session ça sert toujours…

<?php
ini_set('display_errors', 1);      // Afficher les erreurs (au cas ou désactivé)
error_reporting(E_ERROR);          // N'afficher que les erreurs (pas les warning)
setlocale(LC_TIME, 'fr_FR.UTF8');  // Date et heure en Français avec les fonctions
                                   // PHP (nécessite locale fr_FR.UTF8)
session_start();                   // On démarre une session...

2. Constantes

Ensuite, voici quelques constantes que j’ai l’habitude de définir…

<?php
define("DEBUG", true);              // Pour débuger à la mimine
define("MYSQL_HOST", "localhost");  // Hôte MySQL
define("MYSQL_DB", "database");     // Base de donnée
define("MYSQL_USER", "user");       // Utilisateur MySQL
define("MYSQL_PASS", "pass");       // Mot de passe

3. Autoload (PHP 5 >= 5.1.2)

Marre d’inclure manuellement vos fichiers de classes ?? Utilisez les espace de nom !
Plus intéressant, le spl autoload, cette fonction permet de définir une fonction personnalisée qui sera appelée par PHP lorsque qu’il ne trouvera pas une classe.

Normalement, si vous avez une classe Personne dans le fichier Class/personne.class.php, pour l’utiliser vous faisiez:

<?php
require_once 'Class/personne.class.php';
$p = new Personne();

Maintenant, avec PHP5, vous pouvez ajouter un namespace (espace de nom) à votre classe PHP :

<?php
namespace App;
class Personne {

et ainsi non plus inclure le fichier PHP dans votre script, mais importer la classe comme vous le feriez en Java par exemple :

<?php
use \App\Personne;
$p = new Personne();

Mais cela ne dispense malheureusement pas d’inclure le fichier … sauf si l’on utilise l’autoload.
PHP va chercher a inclure la classe « Personne », ne va pas la trouver dans les lib déjà chargés, va alors appeler notre méthode défini par « spl_autoload_register(notre_methode) » qui va se charger d’inclure le fichier.

<?php
// Permet l'inclusion automatique des classes (voir namespace PHP)
function autoload($class) {
    require_once 'Class/' . str_replace('\\', '/', $class).'.class.php';
}
spl_autoload_register('autoload');

// Vérifier si une class existe (voir namespace PHP)
function exist($class) {
    return file_exists('Class/' . str_replace('\\', '/', $class).'.class.php');
}

4. PUT Datas & JSON

Si jamais votre application est un webservice rest json, ces petites lignes permettent de passer toutes les donnés issuent d’un POST ou d’un PUT dans le tableau $_POST, que ces données soient des variables HTTP (clé/valeur) ou JSON

<?php
switch ($_SERVER['REQUEST_METHOD']) {
    case 'POST':
    case 'PUT':
        $input = file_get_contents('php://input');
        if (!empty($input)) {
            $data = array();
            if (substr($input, 0, 1) === "{" || substr($input, 0, 1) === "[")
                $data = (array) json_decode($input);
            else if (strpos($input, "=") > 0)
                parse_str($input, $data);
            if (count($data) > 0) $_POST = array_merge($_POST, $data);
        }
        break;
}

Tous ceci est bien sur à mettre dans un mm fichier « bootstrap.php », et d’inclure ce fichier dans votre index.

Bon dév à tous 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *