## include

(PHP 4, PHP 5, PHP 7, PHP 8)

L'expression de langage `include` inclut et exécute le fichier spécifié en argument.

Cette documentation s'applique aussi à l'instruction de langage require.

Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun n'est fourni, l'include_path sera vérifié. Si le fichier n'est pas trouvé dans l' include_path, `include` vérifiera dans le dossier du script appelant et dans le dossier de travail courant avant d'échouer. L'instruction `include` émettra `E_WARNING` si elle ne peut trouver le fichier ; ce comportement est différent de require, qui émettra `E_ERROR`.

Il est à noter que `include` et `require` vont lever des erreurs supplémentaires de type `E_WARNING`, si le fichier n'est pas accessible, avant de lever une erreur de type `E_WARNING` ou `E_ERROR`, respectivement.

Si un chemin est défini, absolu (commençant par une lettre de lecteur suivie de `\` pour Windows, ou `/` pour Unix/Linux) ou relatif (commençant par . ou ..), l'include_path sera ignoré. Par exemple, si un nom de fichier commence par `../`, PHP cherchera dans le dossier parent pour y trouver le fichier spécifié.

Pour plus d'informations sur la façon dont PHP gère les fichiers inclus ainsi que le chemin d'inclusion, se reporter à la documentation relative à l'include_path.

Lorsqu'un fichier est inclus, le code le composant hérite de la portée des variables de la ligne où l'inclusion apparaît. Toutes les variables disponibles à cette ligne dans le fichier appelant seront disponibles dans le fichier appelé, à partir de ce point. Cependant, toutes les fonctions et classes définies dans le fichier inclus ont une portée globale.

Exemple #1 Exemple avec `include`

    vars.php
    <?php

    $couleur = 'verte';
    $fruit = 'pomme';

    ?>

    test.php
    <?php

    echo "Une $fruit $couleur"; // Une

    include 'vars.php';

    echo "Une $fruit $couleur"; // Une pomme verte

    ?>

Si l'inclusion intervient à l'intérieur d'une fonction, le code inclus sera alors considéré comme faisant partie de la fonction. Cela modifie donc le contexte de variables accessibles. Une exception à cette règle : les constantes magiques sont analysées par l'analyseur avant que l'inclusion n'intervienne.

Exemple #2 Inclusion de fichiers dans une fonction

    <?php

    function foo()
    {
        global $couleur;

        include 'vars.php';

        echo "Une $fruit $couleur";
    }

    /* vars.php est dans le contexte de foo()     *
     * donc $fruit n'est pas disponible hors de   *
     * cette fonction. $couleur l'est, car c'est  *
     * une variable globale                       */

    foo();                      // Une pomme verte
    echo "Une $fruit $couleur"; // Une verte

    ?>

Lorsqu'un fichier est inclus, l'analyse bascule du mode PHP au mode HTML au début du fichier cible, et reprend à la fin de celui-ci. Pour cette raison, tout code du fichier cible devant être exécuté comme du code PHP doit être placé entre des balises PHP de début et de fin valides.

Si les enveloppes d'inclusion d'URL sont activées dans PHP, il est possible de localiser le fichier avec une URL (via HTTP ou bien avec une enveloppe adaptée : voir Liste des protocoles et des gestionnaires supportés pour une liste des protocoles), au lieu d'un simple chemin local. Si le serveur distant interprète le fichier comme du code PHP, des variables peuvent être transmises au serveur distant via l'URL et la méthode GET. Ce n'est pas, à strictement parler, la même chose que d'hériter du contexte de variable. Le fichier inclus est en fait un script exécuté à distance, et son résultat est inclus dans le code courant.

Exemple #3 Utiliser l'instruction `include` via HTTP

    <?php

    /* Cet exemple suppose que www.example.com est configuré pour traiter
     * les fichiers .php et non pas les fichiers .txt. De plus,
     * 'Work' signifie ici que les variables
     * $foo et $bar sont disponibles dans le fichier inclus
     */

    // Ne fonctionne pas : file.txt n'a pas été traité par www.example.com comme du PHP
    include 'http://www.example.com/file.txt?foo=1&bar=2';

    // Ne fonctionne pas : le script cherche un fichier nommé
    // 'file.php?foo=1&bar=2' sur le système local
    include 'file.php?foo=1&bar=2';

    // Réussi
    include 'http://www.example.com/file.php?foo=1&bar=2';
    ?>

Avertissement

# Alerte de sécurité

Un fichier distant peut être traité sur le serveur distant (dépendamment de l'extension du fichier et si le serveur distant exécute PHP ou non) mais il doit toujours produire un script PHP valide parce qu'il sera traité sur le serveur local. Si le fichier du serveur distant doit être traité sur place et affiché seulement, readfile() est une fonction beaucoup plus appropriée. Autrement, il est recommandé de bien faire attention à sécuriser le script distant afin qu'il produise un code valide et désiré.

Voir aussi travailler avec les fichiers distants, fopen() et file() pour des informations relatives.

Gestion du retour : `include` retourne `false` en cas d'erreur et émet un avertissement. Les inclusions réussies retournent `1`, sauf si une valeur de retour est définie par le fichier inclus. Il est possible d'exécuter la structure de langage return à l'intérieur d'un fichier inclus afin de déterminer le processus dans ce fichier, et retourner au script qui l'a appelé. De plus, il est possible de retourner des valeurs depuis des fichiers inclus. Il est possible de récupérer la valeur depuis l'appel au fichier inclus comme depuis une fonction normale. Ce n'est cependant pas possible lors de l'inclusion de fichiers distants, et ce, tant que la sortie du fichier distant n'a pas de balises PHP de début et de fin valides (tout comme pour les fichiers locaux). Il est possible de déclarer les variables nécessaires à l'intérieur de ces balises et elles seront introduites à l'endroit où le fichier a été inclus.

Comme `include` est une structure de langage particulière, les parenthèses ne sont pas nécessaires autour de l'argument. Il faut faire attention lors de la comparaison de la valeur retournée.

Exemple #4 Comparaison de la valeur de retour d'une inclusion

    <?php
    // Ne fonctionne pas, évalué comme include(('vars.php') == TRUE), i.e. include('1')
    if (include('vars.php') == TRUE) {
        echo 'OK';
    }

    // Fonctionne
    if ((include 'vars.php') == TRUE) {
        echo 'OK';
    }
    ?>

Exemple #5 `include` et return

    return.php
    <?php

    $var = 'PHP';

    return $var;

    ?>

    noreturn.php
    <?php

    $var = 'PHP';

    ?>

    testreturns.php
    <?php

    $foo = include 'return.php';

    echo $foo; // affiche 'PHP'

    $bar = include 'noreturn.php';

    echo $bar; // affiche 1

    ?>

`$bar` a la valeur de `1` car l'inclusion était réussie. Il est à noter la différence entre les deux exemples ci-dessus. Le premier utilise la commande return dans le fichier inclus, alors que le second ne le fait pas. Si le fichier ne peut être inclus, `false` est retourné et une erreur de niveau `E_WARNING` est envoyée.

S'il y a des fonctions définies dans le fichier inclus, elles peuvent être utilisées dans le fichier principal si elles sont avant le return ou après. Si le fichier est inclus deux fois, PHP émettra une erreur fatale car les fonctions ont déjà été déclarées. Il est recommandé d'utiliser include_once au lieu de vérifier si le fichier a déjà été inclus et donc de retourner conditionnellement l'inclusion du fichier.

Une autre façon d'inclure un fichier PHP dans une variable est de capturer la sortie en utilisant les fonctions de contrôle de sortie avec `include`. Par exemple :

Exemple #6 Utilisation de la sortie du buffer pour inclure un fichier PHP dans une chaîne

    <?php
    $string = get_include_contents('somefile.php');

    function get_include_contents($filename) {
        if (is_file($filename)) {
            ob_start();
            include $filename;
            return ob_get_clean();
        }
        return false;
    }

    ?>

Pour automatiquement inclure des fichiers dans les scripts, voir également les options de configuration auto_prepend_file et auto_append_file du php.ini.

> Note: Comme ceci est une structure du langage, et non pas une fonction, il n'est pas possible de l'appeler avec les fonctions variables ou arguments nommés.

Voir aussi require, require_once, include_once, get_included_files(), readfile(), virtual(), et include_path.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open