1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-24 07:02:06 +01:00
Files
2026-03-02 14:11:07 +01:00

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>
&note.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
-->