PHP Fichier basé sur flux


Exemple

Ouvrir un flux

fopen ouvre un handle de flux de fichiers, qui peut être utilisé avec différentes fonctions pour la lecture, l'écriture, la recherche et d'autres fonctions. Cette valeur est du type resource et ne peut pas être transmise aux autres threads persistants.

$f = fopen("errors.log", "a"); // Will try to open errors.log for writing

Le deuxième paramètre est le mode du flux de fichiers:

Mode La description
r Ouvrir en mode lecture seule, commençant au début du fichier
r+ Ouvert à la lecture et à l'écriture, à partir du début du fichier
w ouvert uniquement pour l'écriture, commençant au début du fichier. Si le fichier existe, il videra le fichier. S'il n'existe pas, il tentera de le créer.
w+ ouvert pour la lecture et l'écriture, en commençant par le début du fichier. Si le fichier existe, il videra le fichier. S'il n'existe pas, il tentera de le créer.
a ouvrir un fichier pour l'écriture seulement, à partir de la fin du fichier. Si le fichier n'existe pas, il essaiera de le créer
a+ ouvrir un fichier pour la lecture et l'écriture, à partir de la fin du fichier. Si le fichier n'existe pas, il essaiera de le créer
x créer et ouvrir un fichier pour l'écriture uniquement. Si le fichier existe, l'appel fopen échouera
x+ créer et ouvrir un fichier pour la lecture et l'écriture. Si le fichier existe, l'appel fopen échouera
c Ouvrez le fichier pour l'écriture seulement. Si le fichier n'existe pas, il essaiera de le créer. Il commencera à écrire au début du fichier, mais ne videra pas le fichier avant l'écriture
c+ Ouvrez le fichier pour la lecture et l'écriture. Si le fichier n'existe pas, il essaiera de le créer. Il commencera à écrire au début du fichier, mais ne videra pas le fichier avant l'écriture

L'ajout d'un t derrière le mode (par exemple a+b , wt , etc.) dans Windows traduira "\n" fins de ligne en "\r\n" lorsque vous travaillez avec le fichier. Ajoutez b derrière le mode si cela n'est pas prévu, surtout s'il s'agit d'un fichier binaire.

L'application PHP devrait fermer les flux en utilisant fclose lorsqu'ils ne sont plus utilisés pour éviter l'erreur Too many open files . Ceci est particulièrement important dans les programmes CLI, car les flux ne sont fermés que lorsque le runtime est arrêté - cela signifie que dans les serveurs Web, il peut ne pas être nécessaire (mais devrait toujours éviter les fuites de ressources) pour fermer les flux. Si vous ne vous attendez pas à ce que le processus s'exécute pendant une longue période et n'ouvre pas beaucoup de flux.

En train de lire

L'utilisation de fread lira le nombre d'octets donné à partir du pointeur de fichier ou jusqu'à ce qu'un EOF soit atteint.

Lignes de lecture

Utiliser fgets lira le fichier jusqu'à ce qu'une fin de ligne soit atteinte ou que la longueur donnée soit lue.

Les deux fread et fgets se déplace le pointeur de fichier lors de la lecture.

Lire tout ce qui reste

En utilisant stream_get_contents , tous les octets restants dans le flux se retrouveront dans une chaîne et la stream_get_contents .

Réglage de la position du pointeur de fichier

Après avoir ouvert le flux, le pointeur de fichier se trouve au début du fichier (ou à la fin, si le mode a est utilisé). L'utilisation de la fonction fseek déplacera le pointeur de fichier vers une nouvelle position, par rapport à l'une des trois valeurs suivantes:

  • SEEK_SET : c'est la valeur par défaut; le décalage de la position du fichier sera relatif au début du fichier.
  • SEEK_CUR : Le décalage de la position du fichier sera relatif à la position actuelle.
  • SEEK_END : Le décalage de la position du fichier sera relatif à la fin du fichier. Passer un décalage négatif est l'utilisation la plus courante pour cette valeur; il déplacera la position du fichier sur le nombre d'octets spécifié avant la fin du fichier.

rewind est un raccourci pratique de fseek($fh, 0, SEEK_SET) .

Utiliser ftell affichera la position absolue du pointeur de fichier.

Par exemple, le script suivant lit les 10 premiers octets, lit les 10 octets suivants, ignore 10 octets, lit les 10 octets suivants, puis les 10 derniers octets dans file.txt:

$fh = fopen("file.txt", "rb");
fseek($fh, 10); // start at offset 10
echo fread($fh, 10); // reads 10 bytes
fseek($fh, 10, SEEK_CUR); // skip 10 bytes
echo fread($fh, 10); // read 10 bytes
fseek($fh, -10, SEEK_END); // skip to 10 bytes before EOF
echo fread($fh, 10); // read 10 bytes
fclose($fh);

L'écriture

Utiliser fwrite écrit la chaîne fournie dans le fichier en commençant par le pointeur de fichier actuel.

fwrite($fh, "Some text here\n");