mirror of
https://github.com/php/doc-fr.git
synced 2026-03-24 07:02:06 +01:00
351 lines
11 KiB
XML
351 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: a124543dd3f6b1e5567b07420d23899e582514dc Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
|
|
<sect1 xml:id="function.include" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>include</title>
|
|
<?phpdoc print-version-for="include"?>
|
|
<simpara>
|
|
L'expression de langage <literal>include</literal> inclut et exécute
|
|
le fichier spécifié en argument.
|
|
</simpara>
|
|
<simpara>
|
|
Cette documentation s'applique aussi à l'instruction de langage
|
|
<function>require</function>.
|
|
</simpara>
|
|
<simpara>
|
|
Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun
|
|
n'est fourni, l'<link linkend="ini.include-path">include_path</link>
|
|
sera vérifié. Si le fichier n'est pas trouvé dans l'
|
|
<link linkend="ini.include-path">include_path</link>,
|
|
<literal>include</literal> vérifiera dans le dossier du script appelant
|
|
et dans le dossier de travail courant avant d'échouer. L'instruction
|
|
<literal>include</literal> émettra <constant>E_WARNING</constant> si elle
|
|
ne peut trouver le fichier; ce comportement est différent de
|
|
<function>require</function>, qui émettra <constant>E_ERROR</constant>.
|
|
</simpara>
|
|
<simpara>
|
|
Il est à noter que <literal>include</literal> et <literal>require</literal>
|
|
vont lever des erreurs de type <constant>E_WARNING</constant>, si le
|
|
fichier n'est pas accessible, avant de lever une erreur de type
|
|
<constant>E_WARNING</constant> ou <constant>E_ERROR</constant>, respectivement.
|
|
</simpara>
|
|
<simpara>
|
|
Si un chemin est défini, absolu (commençant par une lettre de lecteur suivie
|
|
de <literal>\</literal> pour Windows, ou <literal>/</literal> pour Unix/Linux)
|
|
ou relatif (commençant par . ou ..), l'<link linkend="ini.include-path">include_path</link>
|
|
sera ignoré. Par exemple, si un nom de fichier commence par <literal>../</literal>,
|
|
PHP cherchera dans le dossier parent pour y trouver le fichier spécifié.
|
|
</simpara>
|
|
<simpara>
|
|
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'<link linkend="ini.include-path">include_path</link>.
|
|
</simpara>
|
|
<simpara>
|
|
Lorsqu'un fichier est inclus, le code le composant hérite de la
|
|
<link linkend="language.variables.scope">portée des variables</link>
|
|
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.
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>Exemple avec <literal>include</literal></title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
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
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<simpara>
|
|
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 <link
|
|
linkend="language.constants.magic">constantes magiques</link> sont analysées
|
|
par l'analyseur avant que l'inclusion n'intervienne.
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>Inclusion de fichiers dans une fonction</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?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
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<simpara>
|
|
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
|
|
<link linkend="language.basic-syntax.phpmode">des balises PHP
|
|
de début et de fin valides</link>.
|
|
</simpara>
|
|
<simpara>
|
|
Si les <link linkend="ini.allow-url-include">gestionnaires d'inclusion d'URL</link>
|
|
sont activés dans PHP,
|
|
il est possible de localiser le fichier avec une URL (via HTTP ou
|
|
bien avec un gestionnaire adapté : voir <xref linkend="wrappers"/>
|
|
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.
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>Utiliser l'instruction <literal>include</literal> via HTTP</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?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';
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<warning>
|
|
<title>Alerte de sécurité</title>
|
|
<para>
|
|
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,
|
|
<function>readfile</function> 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é.
|
|
</para>
|
|
</warning>
|
|
<para>
|
|
Voir aussi
|
|
<link linkend="features.remote-files">travailler avec les fichiers distants</link>,
|
|
<function>fopen</function> et
|
|
<function>file</function> pour des informations relatives.
|
|
</para>
|
|
<simpara>
|
|
Gestion du retour : <literal>include</literal> retourne &false; en cas
|
|
d'erreur et émet un avertissement. Les inclusions avec succès, y compris si
|
|
elles sont écrasées par le fichier inclus, retournent
|
|
<literal>1</literal>. Il est possible d'exécuter la structure
|
|
de langage <function>return</function> à 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 <link linkend= "language.basic-syntax.phpmode">balises PHP de début
|
|
et de fin valides</link> (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.
|
|
</simpara>
|
|
<para>
|
|
Comme <literal>include</literal> est une structure de langage particulière,
|
|
les parenthèses ne sont pas nécessaires autour de l'argument. Faites attention
|
|
lors de la comparaison de la valeur retournée.
|
|
<example>
|
|
<title>Comparaison de la valeur de retour d'une inclusion</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?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';
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title><literal>include</literal> et <function>return</function></title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
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
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<simpara>
|
|
<literal>$bar</literal> a la valeur de &one; car
|
|
l'inclusion était réussie. Il est à noter la différence entre les deux
|
|
exemples ci-dessus. Le premier utilise la commande
|
|
<function>return</function>
|
|
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 <constant>E_WARNING</constant> est envoyée.
|
|
</simpara>
|
|
<para>
|
|
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
|
|
<function>return</function> 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 <function>include_once</function>
|
|
au lieu de vérifier si le fichier a déjà été inclus et donc de retourner
|
|
conditionnellement l'inclusion du fichier.
|
|
</para>
|
|
<simpara>
|
|
Une autre façon d'inclure un fichier PHP dans une variable est de capturer
|
|
la sortie en utilisant les fonctions de
|
|
<link linkend="ref.outcontrol">contrôle de sortie</link> avec
|
|
<literal>include</literal>. Par exemple :
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>Utilisation de la sortie du buffer pour inclure un fichier PHP dans
|
|
une chaîne</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?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;
|
|
}
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Pour automatiquement inclure des fichiers dans les scripts, voir également
|
|
les options de configuration
|
|
<link linkend="ini.auto-prepend-file">auto_prepend_file</link> et
|
|
<link linkend="ini.auto-append-file">auto_append_file</link>
|
|
du &php.ini;.
|
|
</para>
|
|
|
|
¬e.language-construct;
|
|
|
|
<simpara>
|
|
Voir aussi
|
|
<function>require</function>,
|
|
<function>require_once</function>,
|
|
<function>include_once</function>,
|
|
<function>get_included_files</function>,
|
|
<function>readfile</function>, <function>virtual</function>, et
|
|
<link linkend="ini.include-path">include_path</link>.
|
|
</simpara>
|
|
</sect1>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|