8.37 Système de fichiers 
8 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
 
  | 
 
  8.37.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. ( i.e. l'option de  
php.ini
 
user_agent
  est utilisée par le gestionnaire  
http
 )
      Pour une description des  
context
  et du paramètre
       
zcontext
 , reportez-vous à  Flux .
      
 |   
| Note |  | 
 Le support de contexte a été
ajouté en PHP 5.0.0. 
 |   
| 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
 .
    
 |