Langage de programmation PHP
Chapitre 1. Introduction
Chapitre 2. Variables, opérateurs et expressions
Chapitre 3. Instructions de contrôle
Chapitre 4. Tableaux
Chapitre 5. Entrées/Sorties
Chapitre 6. Réutilisation de code
Chapitre 7. Lecture/écriture de fichiers
Chapitre 8. Fonctions diverses
Chapitre 9. Sérialisation
Chapitre 10. Fonctions orientées réseau
Chapitre 11. Base de données
Chapitre 12. Manipulations d’images
Chapitre 13. Programmation objet : PHP et les classes ( PHP 4/PHP 5)
Chapitre 14. Gestion des Exceptions (PHP 5)
Chapitre 15. Contrôle de sessions
Chapitre 16. PHP - Ajax
Chapitre 17. Webservices & SOAP
Chapitre 18. PHP en chiffre
Chapitre 19. Conclusion
Chapitre 20. Bibliographie
Page d'accueilTable des matièresNiveau supérieurPage précédenteBas de la pagePage suivante

Chapitre 7. Lecture/écriture de fichiers

Comme dans la plupart des langages, afin de travailler avec un fichier, il est nécessaire d’ouvrir l’accès au fichier, d’y accéder, puis de le fermer.
Il est possible en PHP d’ouvrir un fichier local (fonction fopen) ou distant et le désignant par une URL et un protocole (http ou ftp).
Les différents modes d'ouvertures sont les suivants :

  • r : ouverture en lecture seule à partir du début,
  • r+ : ouverture en lecture/écriture à partir du début,
  • w : ouverture en écriture seule. Si le fichier existe déjà, il est écrasé, sinon, il est crée (si possible),
  • w+: ouverture en lecture/écriture. Si le fichier existe déjà, il est écrasé, sinon, il est crée (si possible),
  • a : ouverture en ajout uniquement. Les données sont écrites à la fin du fichier, s'il n'existe pas, il est crée (si possible),
  • a+ : ouverture en lecture et ajout. Les données sont écrites à la fin du fichier, s'il n'existe pas, il est crée (si possible).
Afin de revenir au début du fichier, il est nécessaire d'utiliser la fonction fseek. Le premier paramètre est l'identifiant du fichier retourné par fopen, le second paramètre est l'offset (décalage en nombre d'octets, à partir du début du fichier - exprimé par un entier).

Nous n’allons pas le décrire ici, mais il est également possible d’accéder à des fichiers en ouvrant un canal ou pipe avec la fonction popen ou en ouvrant une connexion par socket avec fsockopen.

Voici un exemple d’ouverture fichier :

< ?
$monFichier = fopen(‘’monfichier.txt’’,’’ w’’) ; // ouverture en écriture
if ( !($monfichier)) {
print(‘’ Impossible de créer le fichier \n’’) ;
exit ;
}

fputs($monfichier, ‘’ligne 1’’) ; // on écrit deux lignes
fputs($monfichier, ‘’ligne 2’’) ;

fclose($monfichier) ; // on ferme le fichier, on libère les ressources

$monfichier = fopen(‘’monfichier.txt’’, ’’r’’) ; // ouverture en lecture
if ( !($monfichier)) {
print(“ Impossible d’ouvrir le fichier ”) ;
exit ;
}
while ( !feof($monfichier) ) {
$ligne = fgets($monfichier,255); // 255 caractères max. ou bien fin de ligne.
print ‘’ $ligne <BR> ‘’ ;
}

fclose ($monfichier) ;

?>

On peut également accéder à des fichiers distants en passant par une URL :

$url = ‘’http://wwwbay.univ-pau.fr/~roose/index.shtml’’ ;
fopen($url) ;

Il est parfois nécessaire de lire un fichier pour l’afficher par la suite dans le navigateur. La fonction readfile permet ceci en renvoyant le contenu du fichier vers le navigateur. La valeur retournée est le nombre d’octets lus. Si le nom du fichier commence par http:// ou ftp://, l’accès à ce dernier sera fait via l’un de ces protocoles. Dans le cas où aucun protocole n’est spécifié, l’accès se fait sur le système local, celui sur lequel est hébergée la page PHP correspondante.

Il existe toute une série de fonctions associées aux fichiers, comme :

  • fgetcsv (descripteur, longeur max, séparateur) : permet de lire une chaîne de caractère en ne prenant pas le marqueur de fin de ligne comme fin, mais le séparateur précisé. Très pratique pour lire des contenus exportés au format csv.
  • file_exists(descripteur de fichier) : teste l’existence d’un fichier (ne fonctionne pas avec des accès HTTP ou FTP).
  • filesize(‘’ nom fichier’’) qui retourne la taille en octets du fichier.
  • fseek (descripteur fichier, offset) : permet de se positionner à l’octet “ offset ” dans le fichier. Cette fonction retourne 0 si tout c’est bien passé, -1 sinon.
  • rewind (descripteur): place le pointeur au début du fichier.
  • chmod(fichier, droits unix) : change les droits du fichier (à condition que le serveur PHP ai également les droits dessus).
  • unlink(nom du fichier) : supprime ce fichier.
  • is_dir(‘’ nom fichier’’) ; is_executable(‘’nom fichier’’), is_link(‘’ nom fichier’’), is_readable(‘’ nom fichier’’), is_writeable(‘’ nom fichier’’) permettant de savoir si un fichier est un répertoire, exécutable, un lien, si les droits en lecture ou écriture sont valides. Lorsque les évaluations sont vérifiées, 1 est retourné, 0 sinon.
  • opendir(‘’ nom répertoire’’) retourne un état de répertoire exploitable par la suite avec readdir et closedir.
  • readdir(descripteur de répertoire), retourne le nom du fichier suivant à partir du descripteur de répertoire obtenu avec opendir. On fermera le répertoire avec closedir comme on le fait lorsque l’on ouvre un fichier.
  • fgetcsv(descripteur, nb max de car à lire, délimiteur). Lorsque l’on a à faire à une ficher encodé au format CSV (chaque champs séparé par un délimiteur), il est possible d’utiliser la fonction : fgetcsv qui s’utilise un peu comme la fonction explode. Elle retourne un tableau dont chaque « case» est un champ de la ligne lue au format CSV. Sur le même format, il existe la commande fputcsv.

7.1 Transfert de fichiers (upload)
Il est fréquent de désirer transférer un fichier d'un ordinateur vers le serveur PHP. Afin de réaliser ceci, il est nécessaire d'implémenter la fonction d'upload. Pour ce faire, il faut utiliser la fonction move_upload_file(source, destination). Il est à noter que la source est un fichier déjà présent sur le serveur mais généralement dans un répertoire temporaire. Ce fichier aura été mis dans ce répertoire à l'aide par exemple du code HTML suivant :

<form ENCTYPE="multipart/form-data" action="upload.php" METHOD="POST">
<input type="file" name="nomfichier"> <br>
<input type="submit" value="Télécharger">

On se référera au tableau $_FILE pour plus d'informations. Bien évidemment, on prendra soin de gérer les droits en écriture du répertoire destinataire.
Une fois le transfert réalisé (appui sur le bouton submit) la première chose à faire est de vérifier que l'opération s'est bien passée en vérifiant la présence du fichier dans le dossier temporaire; pour cela, nous avons à notre disposition la fonction is_uploaded_file($_FILES['fichier']['tmp_name']). Une fois la vérification réalisée, on copie le fichier sur notre espace web à l'aide de la fonction move_uploaded_file(string $filename , string $destination) qui est plus sûre que la fonction copy(), car elle vérifie que le fichier à copier vient bien du dossier temporaire (et donc, provient d'un formulaire d'upload).


Page d'accueilTable des matièresNiveau supérieurPage précédenteHaut de la pagePage suivante