Formation PUB300 : PHP, 2018 Réutiliser notre code

Fichier configuration.inc


Il est intéressant de regrouper dans un même fichier toutes les instructions qui doivent être effectuées au début du programme, avant-même que la balise <!DOCTYPE> soit envoyée au navigateur. Ceci nous permettra, notamment, d'effectuer une redirection après avoir effectué un traitement. Si des balises HTML avaient été envoyées au navigateur, la redirection n'aurait pas été permise.

Il en va de même pour les instruction qui feront le « ménage » à la fin de l'affichage d'une page.

Ces fichiers devraient-ils porter l'extension .inc ou .php ? Et devrait-on utiliser require ou require_once pour les inclure ?

▼Publicité

configuration.inc

Le fichier qui regroupe les instruction qui doivent être effectuées au début du programme portera le nom configuration.inc. Notez que certains développeurs aiment l'appeler session.inc.

Voici un exemple de ce que ce fichier peut contenir :

Fichier configuration.inc

<?php

    @session_start();

    require_once 'include/debug.php';

 

    // mode développement ou production

    define('DEVEL', true);

 

    // variables codées en dur

    $serveurBD='localhost';

    $usagerBD = 'root';

    $motDePasseBD = '';

    $nomBD = 'mabd';

    $fuseauHoraire = 'America/Montreal';

    $urlRacineSite = "http://mondomaine.com";

 

    // variables initialisées par programmation

    $dossierRacineSite = dirname(__FILE__, 2);

    $pageActuelle = basename($_SERVER['SCRIPT_NAME']);

 

    // fichier journal pour débogage

    define('DEBUG_LOG_FILE', "$dossierRacineSite\\log\\debug.log");

 

    // fuseau horaire
    date_default_timezone_set($fuseauHoraire);

 

    // gestion des erreurs

    if (DEVEL) {

        // gère et affiche tous les niveaux d'erreurs en mode débogage

        error_reporting(E_ALL);

        ini_set('display_errors', '1');

    }

    else {

        // en mode production, ne gère pas certains  niveaux pour des raisons de performance

        // même pour les niveaux gérés, aucun message ne sera affiché pour des raisons de sécurité

        error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);

        ini_set('display_errors', '0');

    }

 

    // branchement à la BD

    @$mysqli = new mysqli($serveurBD, $usagerBD, $motDePasseBD, $nomBD);

    if ($mysqli->connect_errno) {

        die('&Eacute;chec lors de la connexion &agrave; la base de donn&eacute;es.');

    }

    $mysqli->set_charset("utf8");

?>    

Ce fichier, qui sera placé dans le dossier include, ne devrait-il pas plutôt s'appeler configuration.php ?

Autrement dit, est-ce que ce fichier est considéré comme :

  • un fichier contenant des instructions ne devant pas être exécutées plus d'une fois, comme par exemple des définitions de fonctions (fichier .php) -> on utilisera alors require_once pour l'inclure.

    ou

  • un fichier ne contenant qu'un extrait de code, donc qui ne peut pas être autonome (fichier.inc) -> on utilisera alors require pour l'inclure.

Il est clair que ce fichier ne contient pas de définitions de fonctions. Ce devrait donc être un fichier .inc.

Cependant, il contient l'instruction session_start() qui doit être exécutée une seule fois dans une même page Web. En effet, selon la documentation de PHP : « A partir de PHP 4.3.3, appeler session_start() après qu'une session sois déjà démarrée émettra une erreur E_NOTICE. De plus la deuxième session démarrée sera tout simplement ignorée ».

À preuve, si vous tentez d'exécuter deux fois l'instruction session_start(), le fichier journal d'Apache se verra ajouter la ligne suivante :

« PHP Notice:  A session had already been started - ignoring session_start() in C:\... »

Nous allons donc transgresser la règle générale des inclusions pour ce fichier : même s'il s'agit d'un fichier .inc, nous utiliserons require_once pour l'inclure.

Ex :

PHP

require_once '/include/configuration.inc';

nettoyage.inc

Le fichier nettoyage.inc contiendra notamment l'instruction $mysqli->close(). Il est clair que cette instruction ne doit être exécutée qu'une seule fois puisqu'elle détruit l'objet $mysqli, ce qui ferait planter un deuxième appel à cette instruction.

Le traitement du fichier nettoyage.inc sera donc le même que pour configuration.inc : on utilisera require_once même s'il s'agit d'un fichier .inc.

Ex :

PHP

require_once '/include/nettoyage.inc';

Dernière révision le 19 décembre 2018
Merci de partager !

▼Publicité

Site fièrement hébergé chez GreenGeeks.

Soumettre