6.10 Système de fichiers
6 Référence des fonctions
Manuel PHP
. Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes pré-définies . Voir aussi . basename . chgrp . chmod . chown . clearstatcache . copy . delete . dirname . disk_free_space . disk_total_space . diskfreespace . fclose . feof . fflush . fgetc . fgetcsv . fgets . fgetss . file_exists . file_get_contents . file_put_contents . file . fileatime . filectime . filegroup . fileinode . filemtime . fileowner . fileperms . filesize . filetype . flock . fnmatch ->fopen . fpassthru . fputcsv . fputs . fread . fscanf . fseek . fstat . ftell . ftruncate . fwrite . glob . is_dir . is_executable . is_file . is_link . is_readable . is_uploaded_file . is_writable . is_writeable . link . linkinfo . lstat . mkdir . move_uploaded_file . parse_ini_file . pathinfo . pclose . popen . readfile . readlink . realpath . rename . rewind . rmdir . set_file_buffer . stat . symlink . tempnam . tmpfile . touch . umask . unlink
|
6.10.41 fopen()Ouverture d'un fichier ou d'une URL[ Exemples avec fopen ] PHP 3, PHP 4, PHP 5
resource
fopen (
string
filename
,
string
mode
,
bool
use_include_path
,
resource
zcontext
)
fopen
crée une ressource nommée, spécifiée par le
paramètre
filename
, sous la forme d'un flux.
Si
filename
est de la forme "protocole://",
filename
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
filename
comme un fichier classique.
Si PHP décide que le fichier
filename
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 safe mode ,
ou la directive open_basedir , d'autres
conditions peuvent aussi s'appliquer.
Si PHP a décidé que
filename
spécifie
un protocole enregistré, et que ce protocole est enregistré comme
un protocole réseau, PHP s'assurera que la directive
allow_url_fopen est activée.
Si elle est inactive, PHP va émettre une alerte et l'ouverture
va échouer.
Note |
La liste des protocoles supportés est disponible sur Liste des protocoles supportés .
Certains protocoles (appelés aussi
wrappers
ou gestionnaires)
supportent des
context
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
user_agent
est utilisée par le gestionnaire
http
).
|
Note |
Le support de contexte a été
ajouté en PHP 5.0.0. Pour une description des
contexts
,
référez-vous à ref.stream .
|
Note |
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
't'
en attendant que vous rendiez
votre script plus portable comme mentionné ci-dessous.
|
Le paramètre
mode
spécifie le type d'accès désiré
au flux. Il peut prendre les valeurs suivantes :
mode
|
Description |
'r'
|
Ouvre en lecture seule, et place le pointeur de fichier au
début du fichier.
|
'r+'
|
Ouvre en lecture et écriture, et place le pointeur de
fichier au début du fichier.
|
'w'
|
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.
|
'w+'
|
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.
|
'a'
|
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.
|
'a+'
|
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.
|
'x'
|
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à,
fopen
va échouer, en retournant
FALSE
et
en générant une erreur de niveau
E_WARNING
.
Si le fichier n'existe pas,
fopen
tente de le
créer. Ce mode est l'équivalent des options
O_EXCL|O_CREAT
pour l'appel système
open(2)
sous-jacent. Cette
option est supportée à partir de PHP 4.3.2 et fonctionne uniquement
avec des fichiers locaux.
|
'x+'
|
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à,
fopen
va échouer, en retournant
FALSE
et
en générant une erreur de niveau
E_WARNING
.
Si le fichier n'existe pas,
fopen
tente de le
créer. Ce mode est l'équivalent des options
O_EXCL|O_CREAT
pour l'appel système
open(2)
sous-jacent. Cette
option est supportée à partir de PHP 4.3.2, et fonctionne uniquement
avec des fichiers locaux.
|
Note |
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
\n
comme nouvelle ligne, les systèmes
Windows utilisent
\r\n
, et les systèmes
Macintosh utilisent
\r
.
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.
Windows propose un mode de traduction (
't'
),
qui va traduire automatiquement les caractères
\n
en
\r\n
lorsque vous travaillez sur le fichier.
A l'inverse, vous pouvez utiliser l'option
'b'
pour forcer
le fichier a être écrit en mode binaire, sans traduction des données.
Pour utiliser ces options, ajoutez
'b'
ou
't'
comme dernier caractère du paramètre
mode
.
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
't'
lorsque vous écrivez des
fichiers de texte, et le caractère
\n
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
'b'
dans les autres cas.
Si vous ne précisez pas
'b'
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
\r\n
inopinés.
|
Note |
Pour des raisons de portabilité, il est recommandé de toujours
utiliser l'option
'b'
lorsque vous ouvrez des
fichiers avec
fopen
.
|
Note |
A nouveau, pour des raisons de portabilité, il est fortement
recommandé de réécrire les scripts qui utilisent l'option
't'
, pour qu'ils utilisent le bon caractère
de nouvelle ligne, et le mode
'b'
.
|
Le troisième paramètre optionnel
use_include_path
peut être défini à 1 ou à
TRUE
pour chercher le fichier dans
l' include_path .
Si l'ouverture échoue, la fonction retourne
FALSE
et une alerte
E_WARNING
sera générée. Vous pouvez utiliser
le caractère @
pour supprimer cette alerte.
Exemple avec fopen |
<?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"); ?>
|
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.
Sous Windows, assurez-vous de bien protéger les anti-slash
utilisés dans le chemin du fichier, ou bien utilisez des slash.
Exemple avec fopen sous Windows |
<?php $handle = fopen("c:\\data\\info.txt", "r"); ?>
|
Attention |
Lorsque vous utilisez SSL, le
serveur IIS de Microsoft violera le protocole en fermant la connexion sans
envoyer l'indicateur close_notify. PHP le reportera en tant que "SSL: Fatal
Protocol Error" quand vous arrivez à la fin des données. L'astuce est de
baisser le niveau de la directive error_reporting pour ne pas inclure
les warnings.
A partir de PHP 4.3.7, le bogue est détecté automatiquement lors de l'ouverture
du flux en utilisant https:// et supprimera cet avertissement pour vous.
Si vous utilisez
fsockopen
pour créer une socket ssl://,
vous devez vous occuper vous même de supprimer l'erreur.
|
Note |
Lorsque le safe-mode est activé, PHP vérifie si le
fichier/dossier que vous allez utiliser a le même UID que le script qui est
actuellement exécuté.
|
Voir aussi
Liste des protocoles supportés ,
fclose
,
fgets
,
fread
,
fwrite
,
fsockopen
,
file
,
file_exists
,
is_readable
,
socket_set_timeout
et
popen
.
|