La fonction include() inclus et évalue le
fichier spécifié en argument.
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.
Cela se produit à chaque fois que la fonction
include() est rencontrée. Donc, vous
pouvez utiliser la fonction include()
dans une boucle pour inclure un nombre infini de
fois un fichier, ou même des fichiers différents.
<?php
$files = array ('premier.inc', 'second.inc', 'troisieme.inc');
for ($i = 0; $i < count($files); $i++) {
include $files[$i];
}
?>
include() diffère de
require() car le fichier inclus est
ré-évaluée à chaque fois que la
commande est exécutée, tandis que
require() est remplacée
par le fichier cible lors de la première
exécution, que son contenu soit utilisé
ou non. De plus, cela se fait même s'il
est placé dans une structure conditionnelle,
comme dans un if).
Parceque la fonction include() nécessite
une construction particulière, vous devez l'inclure dans un
bloc si elle est incluse dans une structure conditionnelle.
<?php
/* Ceci est faux, et ne fonctionnera pas comme on l'attend. */
if ($condition)
include($file);
else
include($other);
/* Ceci est CORRECT. */
if ($condition) {
include($file);
} else {
include($other);
}
?>
En PHP 3, il est possible d'exécuter une commande
return depuis un fichier inclus, tant
que cette commande intervient au niveau global du fichier
inclus. Elle ne doit intervenir dans aucun bloc (entre accolade
{}). En PHP 4, cette possibilité a été
supprimée. Cependant, PHP 4 vous autorise à
retourner des valeurs d'un fichier inclus. Vous pouvez
traiter include() comme une fonction
normale, qui retourne une valeur. Mais cela génère
une erreur d'analyse en PHP 3.
Include() en php 3 et php 4
On suppose que le fichier `test.inc' existe,
et est placé dans le même dossier que le fichier
principal :
<?php
echo "Avant le retour<br>\n";
if (1) {
return 27;
}
echo "Après le retour <br>\n";
?>
On suppose que le fichier `main.html' contient ceci :
<?php
$retval = include ('test.inc');
echo "Fichier inclus: '$retval'<br>\n";
?>
Lorsque `main.html' est appelé en PHP 3,
il va générer une erreur d'analyse (parse error)
à la ligne 2; vous ne pouvez pas vous attendre à un
retour sur une fonction include() en PHP 3. En
PHP 4, cependant,le résultat sera :
Avant le retour
Ficher inclus : '27'
Supposons maintenant que `main.html' a
été modifié et contient maintenant le
code suivant :
<?php
include ('test.inc');
echo "Retour dans le main.html<br>\n";
?>
En PHP 4, l'affichage sera :
Avant le retour
Retour dans le main.html
Au contraire, PHP 3 affichera :
Avant le retour
27Retour dans le main.html
Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5
L'erreur d'analyse ci-dessus est le résultat du fait que la commande
return est dans un bloc qui n'est pas une fonction, dans
`test.inc'. Lorsque le return est sorti du bloc,
l'affichage devient :
Avant le retour
27Retour dans le main.html
Le '27' est du au fait que PHP 3 ne supporte pas le return
dans ces fichiers.
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.
<?php
include ("file.inc?varone=1&vartwo=2"); /* ne fonctionne pas. */
$varone = 1;
$vartwo = 2;
include ("file.inc"); /* $varone et $vartwo sont accessibles dans file.inc */
?>
Ne vous laissez pas abuser par le fait que vous pouvez requérir
ou inclure des fichiers via HTTP en utilisant la fonctionnalité
de gestion des fichiers distants ce qui est au dessus reste vrai.
Voir aussi
readfile(),
require() et
virtual().