5.7 Les structures de contrôle
5 Référence du langage
Manuel PHP
. if . else . elseif . Syntaxe alternative . while . do-while . for . foreach . break . continue . switch . declare . return . require ->include . require_once . include_once
|
5.7.15 include
La fonction
include
inclut et exécute
le fichier spécifié en argument.
Cette documentation s'applique aussi à la fonction
require
. Les deux structures de
langage sont identiques, hormis dans leur gestion des
erreurs.
include
produit une
Alerte (
warning
) tandis
que
require
génère une
erreur fatale . En
d'autres termes, n'hésitez pas à utiliser
require
si vous voulez qu'un fichier
d'inclusion manquant interrompe votre script.
include
ne se comporte pas de cette façon,
et le script continuera son exécution. Assurez-vous d'avoir
bien configuré le
include_path
aussi. Soyez prévenus qu'une erreur d'analyse dans un fichier
inclut ne cause pas l'arrêt du script en PHP dans les versions antérieures à 4.3.5. Depuis ces versions,
il le peut.
Les fichiers à inclure sont d'abord recherchés dans le dossier
désigné par
include_path
, relativement au dossier
courant, puis dans
include_path
, relativement au dossier
de travail du script. Par exemple, si
include_path
est
.
, que le dossier de travail est
/www/
, et que vous incluez le fichier
include/a.php
et qu'il y a une instruction
include "b.php"
dans ce fichier, alors
b.php
est d'abord recherché dans
/www/
, puis dans
/www/include/
.
Si le nom du fichier commence par
./
ou
../
,
il est cherché uniquement dans l'
include_path
relatif au dossier
courant d'exécution.
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 inclu ont
une portée globale.
| Exemple avec include |
vars.php <?php
$couleur = 'verte'; $fruit = 'pomme';
?>
test.php <?php
echo "Une $couleur $fruit"; // Une
include 'vars.php';
echo "Une $couleur $fruit"; // Une verte pomme
?>
|
Si l'inclusion intervient à l'intérieure d'une fonction,
le code inclus sera alors considéré comme faisant partie de la
fonction. Cela modifie donc le contexte de variables accessibles.
| Inclusion de fichiers dans une fonction |
<?php
function foo() { global $couleur;
include 'vars.php';
echo "Une $couleur $fruit"; }
/* vars.php est dans le contexte de foo() * * donc $fruit n'est pas disponibles hors de * * cette fonction. $couleur l'est, car c'est * * une variable globale */
foo(); // Une verte pomme echo "Une $couleur $fruit"; // Une verte
?>
|
Il est important de noter que lorsqu'un fichier est
include
ou
require
,
les erreurs d'analyse apparaîtront en HTML tout
au début du fichier, et l'analyse du fichier
parent ne sera pas interrompue. Pour cette raison, le code
qui est dans le fichier doit être placé entre
les balises
habituelles de PHP .
Si les Gestionnaires d'URL
sont activés dans PHP (ce qui est le cas par défaut),
vous pouvez localiser le fichier avec une URL (via HTTP ou
bien avec un gestionnaire adapté : voir Liste des protocoles 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.
| Attention | |
Les versions Windows de
PHP antérieureus à la version 4.3.0 ne supportent pas l'accès aux fichiers
distants avec cette fonction, même si
allow_url_fopen est activé.
|
| Utiliser 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';
$foo = 1; $bar = 2; include 'file.txt'; // OK. include 'file.php'; // OK. ?>
|
| Attention | | 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, vous devriez 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 reliées.
Comme
include
et
require
sont des structures du langage particulières, vous devez les
placer dans un bloc s'ils sont placés dans un bloc conditionnel.
| include et les conditions |
<?php
// Ceci est FAUX et échouera if ($condition) include $file; else include $other;
// Ceci est CORRECT. if ($condition) { include $file; } else { include $other; }
?>
|
Gestion du retour : il est possible d'exécuter une commande
return
dans un fichier inclus pour en
terminer le traitement et retourner au fichier appelant. De plus,
il est possible de retourner des valeurs des fichiers inclus.
Vous pouvez prendre et traiter la valeur retournée par la
fonction, comme toute autre fonction. Ce n'est cependant pas possible
lors de l'inclusion de fichier distant à moins que le fichier distant
a des balises valides de
début et de fin de script PHP (comme avec les fichiers locaux).
Vous pouvez déclarer les variables nécessaire dans ces tags 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. Faîtes attention
lorsque vous comparez la valeur retournée.
| Comparaison de la valeur de retour d'un include |
<?php // ne fonctionne pas, évaluer comme include(('vars.php') == 'OK'), i.e. include('') if (include('vars.php') == 'OK') { echo 'OK'; }
// fonctionne if ((include 'vars.php') == 'OK') { echo 'OK'; } ?>
|
| Note | |
En PHP 3, le
return
n'est pas utilisable à moins que ce
ne soit dans un bloc de fonction, auquel cas le
return
s'applique à une fonction et non
pas au fichier.
|
| 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. Notez 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 de 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 5 enverra une erreur fatale car
les fonctions seront déjà déclarées, tandis que PHP 4 ne se plaindra pas
des fonctions définies après
return
.
Il est recommandé d'utiliser
include_once
au lieu de vérifier
si le fichier a déjà été inclus et donc de retourner conditonnellement 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 :
| 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; $contents = ob_get_contents(); ob_end_clean(); return $contents; } return false; }
?>
|
Pour automatiquement inclure des fichiers dans vos scripts, voyez é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 variables fonctions .
|
Voir aussi
require
,
require_once
,
include_once
,
readfile
,
virtual
et
include_path .
|