Files
doc-fr/reference/filesystem/functions/fopen.xml
T
Damien Seguy 45a0669aff synch with en
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@274285 c90b9560-bf6c-de11-be94-00142212c4b1
2009-01-22 19:57:29 +00:00

383 lines
14 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.28 $ -->
<!-- EN-Revision: 1.33 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.fopen">
<refnamediv>
<refname>fopen</refname>
<refpurpose>Ouvre un fichier ou une URL</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>resource</type><methodname>fopen</methodname>
<methodparam><type>string</type><parameter>filename</parameter></methodparam>
<methodparam><type>string</type><parameter>mode</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>use_include_path</parameter><initializer>false</initializer></methodparam>
<methodparam choice="opt"><type>resource</type><parameter>context</parameter></methodparam>
</methodsynopsis>
<para>
<function>fopen</function> crée une ressource nommée, spécifiée par
le paramètre <parameter>filename</parameter>, sous la forme d'un flux.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>filename</parameter></term>
<listitem>
<para>
Si <parameter>filename</parameter> est de la forme "protocole://",
<parameter>filename</parameter> est supposé être une URL, et PHP va
rechercher un gestionnaire de protocole adapté pour lire ce fichier.
Si aucun gestionnaire pour ce protocole n'est disponible, PHP va émettre
une alerte qui vous permettra de savoir que vous avez des problèmes dans
votre script, et il tentera d'exploiter <parameter>filename</parameter>
comme un fichier classique.
</para>
<para>
Si PHP décide que le fichier <parameter>filename</parameter> est un fichier
local, il va essayer d'ouvrir un flux avec ce fichier. Le fichier doit être
accessible à PHP. Il vous faut donc vous assurer que vous avez les
droits d'accès à ce fichier. Si vous activez le &safemode;,
ou la directive <link linkend="ini.open-basedir">open_basedir</link>, d'autres
conditions peuvent aussi s'appliquer.
</para>
<para>
Si PHP a décidé que <parameter>filename</parameter> spécifie
un protocole enregistré, et que ce protocole est enregistré comme
un protocole réseau, PHP s'assurera que la directive
<link linkend="ini.allow-url-fopen">allow_url_fopen</link> est activée.
Si elle est inactive, PHP va émettre une alerte et l'ouverture
va échouer.
</para>
<note>
<para>
La liste des protocoles supportés est disponible sur <xref linkend="wrappers"/>.
Certains protocoles (appelés aussi <literal>wrappers</literal> ou gestionnaires)
supportent des <literal>context</literal> et/ou des options dans le fichier
&php.ini;. Référez-vous aux pages du manuel traitant le protocole, pour connaître
la liste des options qui sont disponibles. ( e.g. l'option de &php.ini;
<literal>user_agent</literal> est utilisée par le gestionnaire <literal>http</literal>).
</para>
</note>
<para>
Sous Windows, assurez-vous de bien protéger les antislash
utilisés dans le chemin du fichier, ou bien utilisez des slashs.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$handle = fopen("c:\\data\\info.txt", "r");
?>
]]>
</programlisting>
</informalexample>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>mode</parameter></term>
<listitem>
<para>
Le paramètre <parameter>mode</parameter> spécifie le type d'accès désiré
au flux. Il peut prendre les valeurs suivantes :
<table>
<title>
Liste des modes possibles pour la fonction <function>fopen</function> en utilisant
le paramètre <parameter>mode</parameter>
</title>
<tgroup cols="2">
<thead>
<row>
<entry><parameter>mode</parameter></entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>'r'</literal></entry>
<entry>
Ouvre en lecture seule, et place le pointeur de fichier au
début du fichier.
</entry>
</row>
<row>
<entry><literal>'r+'</literal></entry>
<entry>
Ouvre en lecture et écriture, et place le pointeur de
fichier au début du fichier.
</entry>
</row>
<row>
<entry><literal>'w'</literal></entry>
<entry>
Ouvre en écriture seule ; place le pointeur de fichier au
début du fichier et réduit la taille du fichier à 0.
Si le fichier n'existe pas, on tente de le créer.
</entry>
</row>
<row>
<entry><literal>'w+'</literal></entry>
<entry>
Ouvre en lecture et écriture ; place le pointeur de fichier
au début du fichier et réduit la taille du fichier à
0. Si le fichier n'existe pas, on tente de le créer.
</entry>
</row>
<row>
<entry><literal>'a'</literal></entry>
<entry>
Ouvre en écriture seule ; place le pointeur de fichier à
la fin du fichier. Si le fichier n'existe pas, on tente
de le créer.
</entry>
</row>
<row>
<entry><literal>'a+'</literal></entry>
<entry>
Ouvre en lecture et écriture ; place le pointeur de fichier
à la fin du fichier. Si le fichier n'existe pas, on tente
de le créer.
</entry>
</row>
<row>
<entry><literal>'x'</literal></entry>
<entry>
Crée et ouvre le fichier en lecture seule ; place le pointeur de
fichier au début du fichier. Si le fichier existe déjà,
<function>fopen</function> va échouer, en retournant &false; et
en générant une erreur de niveau <constant>E_WARNING</constant>.
Si le fichier n'existe pas, <function>fopen</function> tente de le
créer. Ce mode est l'équivalent des options <literal>O_EXCL|O_CREAT</literal>
pour l'appel système <literal>open(2)</literal> sous-jacent. Cette
option est supportée à partir de PHP 4.3.2 et fonctionne uniquement
avec des fichiers locaux.
</entry>
</row>
<row>
<entry><literal>'x+'</literal></entry>
<entry>
Crée et ouvre le fichier en lecture et écriture ; place le pointeur de
fichier au début du fichier. Si le fichier existe déjà,
<function>fopen</function> va échouer, en retournant &false; et
en générant une erreur de niveau <constant>E_WARNING</constant>.
Si le fichier n'existe pas, <function>fopen</function> tente de le
créer. Ce mode est l'équivalent des options <literal>O_EXCL|O_CREAT</literal>
pour l'appel système <literal>open(2)</literal> sous-jacent. Cette
option est supportée à partir de PHP 4.3.2, et fonctionne uniquement
avec des fichiers locaux.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<note>
<para>
Les systèmes d'exploitation utilisent différents caractères
pour les nouvelles lignes. Lorsque vous écrivez un fichier
texte, et insérez une nouvelle ligne, vous devez utiliser le bon
caractère pour votre système d'exploitation. Les systèmes Unix
utilisent <literal>\n</literal> comme nouvelle ligne, les systèmes
Windows utilisent <literal>\r\n</literal>, et les systèmes
Macintosh utilisent <literal>\r</literal>.
</para>
<para>
Si vous n'utilisez pas le bon caractère de nouvelle ligne lors de
l'écriture de vos fichiers, vous risquez d'ouvrir vos fichiers avec
des applications qui donneront un aspect 'bizarre' au texte.
</para>
<para>
Windows propose un mode de traduction (<literal>'t'</literal>),
qui va traduire automatiquement les caractères <literal>\n</literal> en
<literal>\r\n</literal> lorsque vous travaillez sur le fichier.
À l'inverse, vous pouvez utiliser l'option <literal>'b'</literal> pour forcer
le fichier a être écrit en mode binaire, sans traduction des données.
Pour utiliser ces options, ajoutez <literal>'b'</literal> ou <literal>'t'</literal>
comme dernier caractère du paramètre <parameter>mode</parameter>.
</para>
<para>
Le mode de traduction par défaut dépend de l'interface SAPI et de la
version de PHP que vous utilisez. Nous vous recommandons de toujours
spécifier les options de traductions pour des raisons de portabilité.
Vous devriez utiliser <literal>'t'</literal> lorsque vous écrivez des
fichiers de texte, et le caractère <literal>\n</literal> pour définir
vos fin de ligne, dans les scripts, mais que vous vous attendez à ce
que le fichier soit relu par une application comme Notepad. Vous devriez
toujours utiliser l'option <literal>'b'</literal> dans les autres cas.
</para>
<para>
Si vous ne précisez pas <literal>'b'</literal> lorsque vous travaillez
avec des fichiers binaires, vous pourriez rencontrer des problèmes
avec vos données, comme des images corrompues ou des caractères
<literal>\r\n</literal> inopinés.
</para>
</note>
<note>
<para>
Pour des raisons de portabilité, il est recommandé de toujours
utiliser l'option <literal>'b'</literal> lorsque vous ouvrez des
fichiers avec <function>fopen</function>.
</para>
</note>
<note>
<para>
À nouveau, pour des raisons de portabilité, il est fortement
recommandé de réécrire les scripts qui utilisent l'option
<literal>'t'</literal>, pour qu'ils utilisent le bon caractère
de nouvelle ligne, et le mode <literal>'b'</literal>.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>use_include_path</parameter></term>
<listitem>
<para>
Le troisième paramètre optionnel <parameter>use_include_path</parameter>
peut être défini à 1 ou à &true; pour chercher le fichier dans
l'<link linkend="ini.include-path">include_path</link>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>context</parameter></term>
<listitem>
&note.context-support;
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Retourne une ressource représentant le pointeur de fichier, ou
&false; si une erreur survient.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Si l'ouverture échoue, la fonction retourne &false; et une alerte
<constant>E_WARNING</constant> sera générée. Vous pouvez utiliser
le caractère <link linkend="language.operators.errorcontrol">@</link>
pour supprimer cette alerte.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>4.3.2</entry>
<entry>
Depuis PHP 4.3.2, le mode par défaut est le mode binaire pour toutes
les plates-formes qui font la distinction entre les modes binaire et texte.
Si vous rencontrez des problèmes dans vos scripts après une mise à jour,
essayez d'utiliser le flag <literal>'t'</literal> en attendant que vous rendiez
votre script plus portable comme mentionné ci-dessous.
</entry>
</row>
<row>
<entry>4.3.2</entry>
<entry>
Les options <literal>'x'</literal> et <literal>'x+'</literal>ont été ajoutés.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Exemple avec <function>fopen</function></title>
<programlisting role="php">
<![CDATA[
<?php
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&warn.ssl-non-standard;
&note.sm.uidcheck.dir;
<para>
Si vous rencontrez des problèmes en lecture ou écriture
de fichier et que vous utilisez PHP en version module de serveur,
n'oubliez pas que les fichiers auxquels vous accédez ne sont
pas nécessairement accessibles au processus serveur.
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><xref linkend="wrappers"/></member>
<member><function>fclose</function></member>
<member><function>fgets</function></member>
<member><function>fread</function></member>
<member><function>fwrite</function></member>
<member><function>fsockopen</function></member>
<member><function>file</function></member>
<member><function>file_exists</function></member>
<member><function>is_readable</function></member>
<member><function>stream_set_timeout</function></member>
<member><function>popen</function></member>
<member><function>stream_context_create</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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:"../../../../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
-->