Comment ouvrir un fichier en php

Ou sinon vous pouvez

De Askim
Aller à : navigation, rechercher

Il existe plusieurs solutions pour ouvrir un fichier en PHP. Attention cet article peut être un peu technique et est réservé à un public avancé.

Tout d'abord la solution la plus "simple" consistera à utiliser "file_get_contents" Cette fonction prend plusieurs paramètres, mais un seul est obligatoire (il s'agit du premier).


File Get Contents

Voici la définition de la fonction :

string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )
  • Filename est le chemin du fichier (par exemple "/var/www/monfichier.txt")
  • user_include_path , va permettre d'aller chercher automatiquement dans les include_dir le fichier (si le chemin est relatif)
  • context est une ressource de contexte. En général peu de personnes l'utilise mais cela permet d'utiliser les fonctions sur les flux stream_* , en général on la crée avec stream_context_create
  • offset correspond à la position de départ dans le fichier (utile pour sauter une partie du fichier)
  • maxlen represente le nombre d'octets à lire

Cette fonction n'est pas recommandée en cas de gros fichier avec une utilisation d'un seul paramètre. En effet elle ira lire l'intégralité du fichier et le renverra : si le fichier fait 3 Go, la fonction tentera de mettre 3 Go en mémoire (même si en général les règles de sécurité de PHP tueront votre script avant).

Voici un exemple d'utilisation

$mon_contenu = file_get_contents("/var/www/monfichier.txt")

C'est la méthode la plus simple , mais la moins optimisé. En effet file_get_contents est plutôt lent.


FOPEN

La solution la plus rapide à utiliser pour de gros fichiers est d'utiliser FOPEN Cette fonction se rapproche des primitives qui existe en C et du modèle Posix.

Voici un exemple avec fopen (si on veut ne lire que les 50 premiers octets) :

$fp = fopen("/var/www/monfichier.txt","r") ; // ouvre le fichier en lecture et renvoie une description de fichier
$mon_contenu = fread($fp,50); // lis 50 octets
fclose($fp) ; // on ferme le descripteur de fichier

Mais alors pourquoi fopen est plus rapide ?

Cela s'explique par le fait que PHP ne fera aucun contrôle avec cette fonction, mieux il utilisera des fonctions plus basses du système.

Afin de le démontrer il suffirait d'utiliser le programme Strace (qui affiche les primitives utilisées dans un fichier binaire).

L'inconvénient d'utiliser fopen, est la maintenabilité du code. En effet plus de ligne, moins de compréhension pour les personnes ayant un plus petit niveau en PHP.

A la place de fread, on aurait pu utiliser fgets qui lui va lire "ligne par ligne" , tant qu 'il n'a pas rencontré un retour chariot (le caractère ascii 13).


FILE


Une autre fonction existe aussi , c'est "file"

Cette fonction va renvoyer le contenu du fichier, non plus sous forme de chaîne, mais sous forme de tableau (array) Le séparateur de chacune des entrée dans le fichier brut sera les saut de lignes.


READFILE

Si aucun traitement ne doit être effectué sur le contenu du fichier mais plutôt envoyé directement au navigateur, vous pourriez opter pour "readfile", cette fonction va permettre d'envoyer vers le buffer (tampon) de sortie le contenu du fichier en prenant en compte les problèmes de mémoire liés au fait que le fichier puisse être gros.


Enfin, la dernière solution pour ouvrir un fichier en PHP est d'utiliser ce qu'on appelle un wrapper. Vous créez votre context avec stream_context_create et utilisez comme paramètre "file://" C'est ce que file_get_contents fait nativement.


Liens utiles :

file_get_contents file readfile stream_context_create fopen


Utilisateur anonyme #1

Il y a 11 mois
Pointage 0+
hjhh

Utilisateur anonyme #2

Il y a 2 mois
Pointage 0+
fopen et file_get_contents, c'est autant rapide car file_get_contents est juste un raccourci !
Ajouter votre commentaire
Askim accueille tous les commentaires. Si vous ne voulez pas être anonyme, enregistrez-vous ou connectez-vous. C’est gratuit.

Récupérée de « http://www.askim.info/w/index.php?title=Comment_ouvrir_un_fichier_en_php&oldid=27038 »