Journal Question basique sur le flock en PHP

Posté par  (site web personnel) .
Étiquettes : aucune
0
20
juin
2004
Utilisant pas mal de fichiers texte (pour cause de MySQL très lourd chez Online) pour le stockage sur mes sites (blogs, stats, forums, etc), je suis en train de regarder les mécanismes de verrouillage, que je ne connais pas du tout. Voici un exemple de code :

$fpw = fopen ("test.csv", "w");
flock($fpw, LOCK_EX);

$fpw2 = fopen ("test.csv", "w");
fwrite ($fpw2, "glups");

flock($fpw, LOCK_UN);

fclose ($fpw);
fclose ($fpw2);

A la fin, mon fichier test.csv contient bien "glups" comme chaîne de caractère, alors que j'ai préalablement bloqué le fichier (je m'attendais donc à un bloquage). Je dois interpréter ça comment :

- le flock n'a pas marché (ce qui ne semble pas être le cas, puisque ça renvoit true)
- l'écriture sur fpw2 est en quelque sorte mise en cache (?) et réalisée une fois le fichier débloqué ?

Autre chose que je me demandais : si j'ai un PHP Time Out sur la page avant d'avoir débloqué le fichier, est-ce que le fichier est libéré de manière automatique ou bien est-ce qu'il reste indéfiniment bloqué ou alors bloqué jusqu'à expiration d'un délai ?
  • # Connait pas php mais bon

    Posté par  (Mastodon) . Évalué à 2.

    Il se passe quoi si tu fclose($fpw2) apres avoir écrit, mais avant de libérer le verrou et fermer $fpw ?
    • [^] # Re: Connait pas php mais bon

      Posté par  (site web personnel) . Évalué à 1.

      En fait, j'ouvre 1, je bloque 1, j'ouvre 2, j'écris dans 2 puis je débloque 1 et je ferme 1 et 2. Donc, vu que 1 et 2 pointent vers le même fichier, vu que j'écris dans 2 avant de débloquer 1, je m'attendais à un bloquage de 1 par 2. Or, ce n'est pas le cas. Donc, j'essaie de comprendre comment ça marche.
      • [^] # Re: Connait pas php mais bon

        Posté par  (Mastodon) . Évalué à 2.

        J'ai bien vu ce que tu faisais, je te demandais juste ce qui se passait si tu changeais l'ordre dans lequel tu faisais tout ça, pour voir si l'écriture était effectuée après fermeture du premier flux...

        Ceci dit la réponse en dessous explique tout.
  • # Ca marche pas comme ca

    Posté par  (site web personnel) . Évalué à 5.

    flock n'empeche pas d'acceder au fichier, l'idée c'est que tu fais flock avant d'ecrire et que si quelqu'un d'autre à fait flock ca se bloque en attendant qu'il unlock.

    Par ailleurs il faut savoir que ca ne marche pas sous certains OS ou sur certains filesystems (FAT par exemple)...
  • # flock au niveau processus

    Posté par  . Évalué à 2.

    Sauf erreur et si je me souviens bien :

    - flock fonctionne au niveau du processus et a des problèmes avec les serveurs multithread
    - flock ne marche pas sur NFS

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.