Je cherche un algorithme simple qui dit:fichier bloc PHP à la lecture
Fichier1: (lock.php)
- Ouvrir un fichier
- verrouillage du fichier, de sorte qu'aucun autre fichier PHP peut lire ce
- sommeil
- déverrouillage
Fichier2: (lockstatus.php)
- Essayez d'ouvrir le fichier.
- Si l'ouverture ne
- Attendez verrouillage pour libérer
- Else
- Lire le fichier
Ma mise en œuvre du code:
Lock.php:
<?php
$f = fopen("key",'a');
if (flock($f, LOCK_EX | LOCK_NB)) {
echo "File Locked. For Next 60 Seconds\n";
sleep(60);
var_dump(flock($f, LOCK_UN)); //release lock
echo "lock released";
} else {
echo "blocked";
}
?>
Lockstatus.php
<?php
do {
echo "\n";
$f = fopen("key",'a');
if ($f) {
echo "Readable\n";
fclose ($f);
} else {
echo "Blocked! I am waiting\n";
sleep(10);
}
} while (!$f); //wait until fopen does not work
?>
Problème: Même, flock
est appliqué, le Lockstatus.php
est en mesure d'ouvrir le fichier.
Question:
Comment bloquer le fichier à lire Lockstatus.php
une fois qu'il est verrouillé par Lock.php
?
J'utilise Linux. Par conséquent, je suppose que cela devrait fonctionner dans mon cas. Et fait "r +" cependant, ça ne marche pas. –
Jetez un oeil au premier commentaire sur les docs: "La fonction flock suit la sémantique de l'appel système Unix portant le même nom.Flock n'utilise que le verrouillage ADVISORY, c'est-à-dire que d'autres processus peuvent ignorer complètement le verrou. appelle l'appel du troupeau. " –