Créée le, 19/06/2015

 Mise à jour le, 12/05/2019

Visiteurs N°  




Accueil
Nouveau Blog Nouveautés Moteur de Recherche Votre Caddie Pour Vos Achats Votre Espace Membre Vos Signets et Vos Jeux Préférés Page de Bienvenue Statique Site en Français Site en Anglais
Sommaires
Électronique Fondamentale Technologie Fondamentale Testez vos Connaissances Électronique Théorique Digitale Électronique Pratique Digitale Lexique Électronique Numérique Data book TTL Data book CMOS Dépannage TVC Mathématique
Micro-ordinateurs
Théorique des Micro-ordinateurs Testez vos Connaissances Pratique des Micro-ordinateurs Glossaires sur les Ordinateurs
Physique
La lumière Champ d'action Rayonnement Électromagnétique
Technologies
Classification des Résistances Identification des Résistances Classification des Condensateurs Identification des Condensateurs
Formulaires Mathématiques
Géométrie Physique 1. - Électronique 1. 2. - Électronique 1. 3. - Électrotechnique 1. 4. - Électromagnétisme
Accès à tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages N. B. M. - Tome I - 201 Pages E. T. M. - Tome I - 554 Pages Business à Domicile Ouvrages 34 pages gratuits Nos E-books Logiciel Géométrie Logiciel Composants Électroniques
Aperçu de tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages E. T. M. - Tome I - 554 Pages Logiciel Géométrie Logiciel Composants Électroniques
Nos Leçons aux Formats PDF
Électronique Fondamentale Technologie Fondamentale Électronique Théorique Digitale Électronique Pratique Digitale Théorique des Micro-ordinateurs Mathématiques
Informatique
Dépannage Win98 et WinXP et autres Dépannage PC Glossaire HTML et Programmes PHP et Programmes JavaScript (en cours de travaux) Création de plusieurs Sites
Forums
Forum Électronique et Infos Forum Électronique et Poésie
Divers et autres
Formulaire des pages perso News XML Statistiques CountUs Éditeur JavaScript Nos Partenaires et nos Liens Utiles Gestionnaire de Partenariat Nos Partenaires MyCircle Sondages 1er Livre d'Or 2ème livre d'Or

Signets :
  Leçons suivantes        Leçons précédentes     Bas de page
  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet


Utilisation des Instructions require() et include() et Utilisation des Options de Configuration "auto_prepend_file" et "auto_append_file" (1ère partie) :



Cette leçon explique comment réutiliser du code pour développer des applications plus cohérentes, plus fiables et plus faciles à gérer, avec moins d'efforts. Nous examinerons des techniques de modularisation et de réutilisation du code, à commencer par la simple mise en oeuvre des fonctions require() et include() pour utiliser le même code dans plusieurs pages. Nous expliquerons pourquoi cette technique est plus efficace que le scriptage côté serveur. Cette leçon donne un exemple qui montre bien comment l'utilisation de fichiers include permet d'obtenir une apparence cohérente sur tout un site Web.

Nous verrons également comment écrire et invoquer des fonctions utilisateur, en illustrant nos propos par des exemples de fonctions permettant de générer des pages et des formulaires.

Intérêt d'une réutilisation du code :

Nombre d'Ingénieurs du génie logiciel cherchent à réutiliser du code au lieu d'en écrire du nouveau. Non pas que les développeurs soient particulièrement paresseux, mais la réutilisation de code existant tend à réduire les coûts, à augmenter la fiabilité des programmes, et à améliorer leur cohérence. Dans l'idéal, un nouveau projet devrait être conduit, en combinant des composants logiciels réutilisables existants, avec un minimum de développement à la source.

Cohérence :

Les interfaces externes en usage dans un système, y compris les interfaces utilisateur et les interfaces vers des systèmes externes, doivent être cohérentes. Il faut de l'opiniâtreté et des efforts délibérés pour écrire du nouveau code qui reste cohérent avec les autres parties du système. Par contre, si vous réutilisez du code déjà en service dans une autre part du système, vous avez toutes les chances pour que la fonctionnalité obtenue soit automatiquement cohérente.

Réutiliser du code minimise la charge de travail du développeur, à condition que le code d'origine soit modulaire et bien écrit, et c'est là un avantage majeur de la réutilisation de code. Lors de vos travaux de développement logiciel, attachez-vous à identifier les sections de votre code susceptible de servir ultérieurement dans d'autres applications.

Utilisation des instructions require() et include() :

Le langage PHP offre deux instructions très simples, et néanmoins très utiles, qui permettent de réutiliser tout type de code. Par le biais d'une instruction require() ou include(), vous pouvez charger un fichier dans un script PHP. Le fichier ainsi chargé peut contenir tout ce qui pourrait normalement être inclus dans un script, y compris des instructions PHP, du texte, des balises HTML, des fonctions PHP, ou des classes PHP.

Les instructions require() et include() fonctionnent à la manière des "includes" côté serveur offerts par nombre de serveurs Web, et aux instructions #include des langages C et C++.

Utilisation de la fonction require() :

Soit les fichiers dénommés Reutilisable.php et Principal.php. Supposez que le fichier Reutilisable.php contienne le code suivant :

    <?php

    echo "<BR/> <H2> &nbsp;&nbsp;&nbsp;&nbsp; Voici une d&eacute;claration de PHP tr&egrave;s simple du fichier Reutilisable.php ! </H2> <BR/>" ;

    ?>

Pour visualiser l'aperçu du fichier Réutilisable.php, en cliquant ici. [Exemple 1].

Et que le fichier Principal.php ait le contenu suivant :

    <?php

    echo "<BR/> <H2> <font color='#005500'> &nbsp;&nbsp;&nbsp;&nbsp; Ceci est le fichier Principal.php ! </font> </H2> <BR/>" ;

    require ("Reutilisable.php") ;

    echo "<BR/> <H2> <font color='#005500'> &nbsp;&nbsp;&nbsp;&nbsp; Le script se terminera jusqu'ici du fichier Principal.php ! </font> </H2>" ;

    ?>

Pour visualiser l'aperçu du fichier Principal.php, en cliquant ici. [Exemple 1 bis].

Au chargement du fichier Reutilisable.php, vous verrez apparaître dans votre navigateur Web la phrase suivante : "Voici une déclaration de PHP très simple du fichier Reutilisable.php !", ce qui ne devrait probablement pas vous surprendre. Par contre, le chargement du fichier Principal.php à un effet un peu plus inattendu. Le résultat obtenu est montré à la figure 1.

Fichier_Principal_php.png

La mise en oeuvre d'une instruction require() exige un fichier. Dans l'exemple précédent, nous avons utilisé le fichier dénommé Reutilisable.php. A l'exécution du script, l'instruction require() :

    require ("Reutilisable.php") ;

est remplacée par le contenu du fichier spécifié, et le script contenu dans ce dernier est alors exécuté. L'exécution qui s'opère au chargement du fichier Principal.php est donc équivalente à l'exécution du script suivant :

    <?php

    echo "<BR/> <H2> <font color='#005500'> &nbsp;&nbsp;&nbsp;&nbsp; Ceci est le fichier Principal.php ! </font> </H2> <BR/>" ;

    echo "<BR/> <H2> &nbsp;&nbsp;&nbsp;&nbsp; Voici une d&eacute;claration de PHP tr&egrave;s simple du fichier Reutilisable.php ! </H2> <BR/>" ;

    echo "<BR/> <H2> <font color='#005500'> &nbsp;&nbsp;&nbsp;&nbsp; Le script se terminera jusqu'ici du fichier Principal.php ! </font> </H2>" ;

    ?>

Pour bien utiliser l'instruction require(), vous devez connaître les différents modes de gestion des extensions de noms de fichier et des balises PHP.

La fonction require() et les extensions de noms de fichier :

PHP ignore l'extension du nom du fichier chargé au moyen de la fonction require(). Par conséquent, vous pouvez donner à ce fichier le nom qui vous convient, si tant est que vous ne l'invoquez pas directement. Lorsque la fonction require() est mise en oeuvre pour charger un fichier, celui-ci devient partie intégrante d'un fichier PHP, et est exécuté en tant que tel.

Des instructions PHP stockées dans un fichier appelé, par exemple, page.html, ne sont normalement pas traitées. L'interpréteur PHP ne traite normalement que les fichiers dont les noms portent des extensions définies, telles que .php. Toutefois, si le fichier page.html est chargé via la fonction require(), toute instruction PHP contenue dans ce fichier sera traité par l'interpréteur PHP. Par conséquent, vous pouvez choisir n'importe quelle extension pour les fichiers à inclure via require(). Il est toutefois recommandé de s'en tenir à une convention logique pour le choix des noms de fichier (par exemple, en adoptant systématiquement l'extension .inc pour tous les fichiers à inclure).

Lorsque des fichiers portant une extension non standard, telle que .inc, sont stockés dans une arborescence de documents Web, les utilisateurs qui les chargent directement dans leur navigateur peuvent visualiser leur contenu en plein texte, y compris les mots de passe qui y sont éventuellement spécifiés. Par conséquent, il est très important de stocker ce type de fichier hors de l'arborescence de documents, ou bien alors d'employer des extensions standard.

La fonction require() et les balises PHP :

Dans l'exemple considéré plus haut de cette leçon, le fichier Reutilisable.php avait le contenu suivant :

    <?php

    echo "<BR/> <H2> &nbsp;&nbsp;&nbsp;&nbsp; Voici une d&eacute;claration de PHP tr&egrave;s simple du fichier Reutilisable.php ! </H2> <BR/>" ;

    ?>

Le code PHP stocké dans le fichier est encadré par des balises PHP. L'usage de balises PHP est indispensable pour que le code d'un fichier chargé via la fonction require() soit traité par l'interpréteur PHP. En l'absence de balise PHP, le code sera considéré comme du texte ou du code HTML, et ne sera pas exécuté.

Utilisation de la fonction require() pour des modèles de site Web :

Lorsqu'un site Web doit être conçu avec une présentation et un style cohérent sur toutes les pages, la fonctions PHP require() peut être utilisée pour ajouter un même modèle et des éléments standard à toutes les pages.

Par exemple, considérons le cas d'une entreprise fictive, dénommée CEI "Consultant Électronique-Informatique", dont le site contient tout un jeu de pages ressemblant à la page de la figure 2.

Page_dun_Site.png

Lorsqu'une nouvelle page doit être ajoutée au site, le développeur peut ouvrir une page existante, effacer le texte contenu dans le milieu du fichier, entrer un nouveau texte, puis enregistrer le fichier sous un nouveau nom.

Considérez le scénario suivant : le site Web est en service depuis un certain temps déjà, et contient à présent des centaines, voire des milliers de pages, toutes construites sur le même style. Supposez qu'il soit décidé de procéder à une modification de l'apparence standard, même mineure, comme l'ajout d'une adresse de courrier électronique en bas de chaque page, ou d'une nouvelle entrée dans le menu de navigation. Voulez-vous vous trouver dans la situation de devoir modifier des centaines, voire des milliers de pages ?

La réutilisation des sections HTML communes à toutes les pages est de loin préférable à des opérations de couper/coller à reproduire sur des centaines ou des milliers de pages. Le code source de la page d'accueil montrée à la figure 2 correspond au Listing ci-dessous :

Pour visualiser l'aperçu, en cliquant ici. [Exemple 2].

Le Listing de l'exemple 2, se compose de plusieurs sections de code bien distinctes. L'en-tête HTML contient les définitions d'une feuille de style CSS (Cascading Style Sheet) utilisées dans la page. La section intitulée "Page header" conduit à l'affichage du nom et du logo de l'entreprise, la section "Menu bar" crée la barre de navigation de la page, tandis que la section "Page Content" ou ("le contenu de la page") rassemble le texte spécifique à cette page. Vient ensuite, le Pied de page ou (page footer). Nous allons scinder ce fichier en trois parts, que nous stockerons respectivement dans les fichiers Header.inc, Home.php et Footer.inc. Les fichiers Header.inc et Footer.inc contiendront alors du code que nous réutiliserons pour générer d'autres pages.

Le fichier Home.php vient en remplacement du fichier Home.html, et contient le contenu textuel spécifique de la page, ainsi que deux instructions require(). Le contenu de ce fichier est présenté au Listing ci-après :

Les instructions require() du listing ci-dessus provoquent le chargement des fichiers Header.inc et Footer.inc.

Comme nous l'avons déjà mentionné, les noms attribués à ces fichiers n'ont pas d'incidence sur la manière dont les fichiers sont traités, lorsque le chargement s'effectue via une instruction require(). L'extension .inc (pour "inclure", ou "include") est très souvent adoptée pour ce type de fichiers, qui sont appelés à être inclus dans d'autres fichiers. Cette convention, bien que très répandue, est entièrement optionnelle. Par ailleurs, l'usage est généralement de rassembler les fichiers include dans un dossier visible des scripts, mais qui ne permette pas le chargement individuel des fichiers via le serveur Web. Cette pratique est fortement recommandée. En effet, le chargement individuel de ces fichiers peut provoquer des erreurs si l'extension des fichiers est .php, et que les fichiers ne contiennent que des pages ou des scripts partiels, ou peut permettre à des tiers de lire le code source lorsqu'une extension autre que .php est employée.

Le fichier Header.inc contient les définitions d'une feuille de style CSS utilisées par la page, ainsi que les tableaux qui affichent le nom de l'entreprise et les barres de navigation. Son contenu est donné dans le Listing ci-après :

Le fichier Footer.inc contient le tableau utilisé pour afficher le pied de page, en bas de chaque page. Le Listing ci-après montre le contenu de ce fichier :

Pour visualiser l'aperçu, en cliquant ici. [Exemple 3].

Une telle approche permet d'obtenir facilement une présentation et une apparence homogènes sur tout un site. Une nouvelle page conçue dans le même style peut être aisément générée en quelques lignes de code, par exemple :

    <?PHP

    require ("header.inc") ;

    ?>

    voici le contenu de cette page

    <?PHP

    require ("footer.inc") ;

    ?>

Plus important encore, même lorsque de nombreuses pages ont ainsi été générées à partir des mêmes fichiers d'en-tête et de pied de page, vous pouvez facilement modifier ces fichiers modèles. Que la modification apportée soit mineure, ou qu'elle vise à donner une apparence complètement nouvelle au site, elle ne devra être apportée qu'une seule fois. Cette technique évite d'avoir à traiter chaque page séparément.

Dans l'exemple considéré ici, le corps, l'en-tête et le pied de page de chaque page ne contiennent que du plein HTML. Des instructions PHP peuvent toutefois très bien être utilisées, de sorte à générer dynamiquement certaines parties des pages Web du site.

Utilisation des options de configuration auto_prepend_file et auto_append_file :

Il existe une autre manière d'utiliser l'instruction require() pour ajouter un en-tête et un pied de page à chaque page. Le fichier de configuration php.ini contient deux options de configuration, auto_prepend_file et auto_append_file, qui peuvent être ajustées sur nos fichiers d'en-tête et de pied de page, de sorte que ces fichiers soient systématiquement chargés avant et après chaque page.

Dans un système Windows, le réglage de ces options s'effectuerait de la manière suivante :

    auto_prepend_file = "c:/inetpub/include/header.inc"

    auto_append_file = "c:/inetpub/include/footer.inc"

Sur une plate-forme Unix, ces options se régleraient comme suit :

    auto_prepend_file = "/home/username/include/header.inc"

    auto_apend_file = "/home/username/include/footer.inc"

Lorsque ces directives sont spécifiées dans le fichier php.ini, il n'est plus nécessaire d'implémenter des instructions require(). Par contre, les en-têtes et pieds de page ne sont plus optionnels dans les pages Web.

Avec un serveur Web Apache, vous pouvez ajuster diverses options de configuration comme celles décrites précédemment, pour chaque dossier individuel. Pour cela, vous devez configurer votre serveur de sorte que ces principaux fichiers de configuration soient "écrasables". Pour configurer PHP de sorte à charger automatiquement des fichiers avant et après chaque page, pour un dossier spécifique, créez dans ce dossier un fichier appelé .htaccess. Incluez dans ce fichier les deux lignes suivantes :

    php_value auto_prepend_file "/home/username/include/header.inc"

    php_value auto_apend_file "/home/username/include/footer.inc"

Notez que cette formulation diffère légèrement du paramétrage décrit plus haut pour le fichier php.ini. Divers autres paramètres de configuration peuvent être insérés de la sorte dans ce fichier.

Ce prototype a changé depuis la version 3 de PHP. Si vous utilisez une ancienne version de PHP, les lignes insérées dans votre fichier .htaccess doivent être du type comme suit :

    php3_auto_prepend_file "/home/username/include/header.inc"

    php3_auto_apend_file "/home/username/include/footer.inc"

L'ajustement d'options dans le fichier .htaccess et non pas dans le fichier php.ini ou dans le fichier de configuration du serveur Web, amène une grande flexibilité. Vous pouvez ainsi modifier le paramétrage sur une machine partagée, en n'affectant que vos seuls dossiers. Il n'est pas nécessaire de redémarrer le serveur Web, ni de bénéficier d'un accès administrateur système. L'approche .htaccess a toutefois l'inconvénient que les fichiers sont lus et analysés chaque fois qu'un fichier est sollicité dans le dossier concerné, au lieu d'être lus et analysés une seule fois au démarrage. Elle se traduit donc par une baisse de performance

Utilisation de la fonction include() :

Les instructions require() et include() sont très similaires, mais leurs modes de fonctionnement diffèrent sur des points importants.

Une instruction include() est évaluée chaque fois que le bloc de code la contenant est exécuté, et n'est pas du tout évaluée si le bloc de code n'est pas exécuté. Par contre, une instruction require() est exécutée dès lors qu'elle est analysée par l'interpréteur PHP, même si le bloc de code la contenant n'est pas exécuté.

A moins que le serveur Web ne soit très occupé, cette différence de fonctionnement n'a pas d'effet notable. Elle a toutefois pour conséquence que les instructions require() implémentées au sein de structures conditionnelles sont inefficaces.

    if ($Variable == true)

    {

        require ("file_1.inc") ;

    }

    else

    {

        require ("file_2.inc") ;

    }

Ce code conduit au chargement de chacun des deux fichiers spécifiés à chaque exécution du script, un seul étant utilisé, en fonction de la valeur de la $Variable. Par contre, ce code implémenté avec des instructions include() conduirait au chargement et à l'utilisation d'un seul des deux fichiers comme suit :

    if ($Variable == true)

    {

        include ("file_1.inc") ;

    }

    else

    {

        include ("file_2.inc") ;

    }

Contrairement au cas de fichiers chargés via une instruction require(), une instruction include() employée pour charger un fichier peut renvoyer une valeur. D'autres parties d'un programme peuvent alors être notifiées du succès ou de l'échec du chargement du fichier "include".

Considérons le cas d'une application où de nombreuses ouvertures de fichiers sont nécessaires. Nous pourrions choisir, au lieu de retaper les mêmes lignes de code chaque fois, d'utiliser un fichier "include" pour charger automatiquement les fichiers requis.

Nous pourrions dénommer ce fichier "include" OpenFile.inc, et y insérer le contenu suivant :

    <?PHP

    $fp = fopen ("$name", "$mode");

    if (!$fp)

    {

    echo "<p> <strong> Oh non ! Impossible d'ouvrir le fichier. $fp </strong> </p>" ;

    return 0 ;

    }

    else

    {

    return 1 ;

    }

    fclose($fp) ;

    ?>

Ce code tente d'ouvrir le fichier dénommé $name, selon le mode défini par $mode. En cas d'échec, un message d'erreur est généré, et la valeur 0 est renvoyée. En cas de succès, la valeur 1 est renvoyée, sans qu'aucun message ne soit affiché.

Le fichier OpenFile.php pourrait être chargé au moyen du script suivant :

    <?PHP

    $name = "test_4.txt" ;

    $mode = "r" ;

    $result = include("OpenFile.inc") ;

    if (!$result == 1)

    {

    // faire ce qu'il y a &agrave; faire avec le fichier

    // Se r&eacute;ferrer &agrave; la variable $fp crée dans le fichier include

    }

    ?>

Pour visualiser l'aperçu, en cliquant ici. [Exemple 4].

Notez que les deux variables $name et $mode créées dans le fichier principal, et celles créées dans le fichier "include", existent dans les deux fichiers. Ce comportement vaut à la fois pour les fonctions require() et pour include().

L'instruction require() ne pourrait convenir dans le cas de figure précédent, parce qu'elle ne renvoie pas de valeur. Le renvoi d'une valeur peut se révéler très utile, dans la mesure où il permet de notifier des parties ultérieures du script de l'occurrence d'une erreur, ou d'effectuer des traitements indépendants et de renvoyer une réponse. Les fonctions constituent un meilleur moyen encore que les fichiers "include", pour scinder du code en modules autonomes. La suite de cette leçon leur est consacrée que l'on verra plus loin dans ce même chapitre.

Malgré les avantages que présente l'instruction include() sur l'instruction require(), celle-ci est bien plus utilisée, du fait de sa plus grande rapidité.

Pour l'instant, nous terminons ce premier chapitre et nous verrons dans le prochain, l'usage de fonctions en PHP, invocation de fonctions, définir ses propres fonctions également et d'une structure de base d'une fonction ainsi que les paramètres.



  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet.   Haut de page
  Page précédente   Page suivante







Nombre de pages vues, à partir de cette date : le 23 MAI 2019

compteur de visite

    




Envoyez un courrier électronique à Administrateur Web Société pour toute question ou remarque concernant ce site Web. 

Version du site : 10. 5. 14 - Site optimisation 1280 x 1024 pixels - Faculté de Nanterre - Dernière modification : 19 MAI 2019.   

Ce site Web a été Créé le, 14 Mars 1999 et ayant Rénové, en MAI 2019.