Guten Tag,
leider habe ich in einem anderen Forum, wo ich meine Frage gepostet habe, noch keine Antwort bekommen, daher versuche ich es einmal hier.
Nach langer Suche habe ich in Flatbox eine Funktion gefunden, welche Dateien sperrt. (Zeile 278 im Script) Ich habe mir nun überlegt, diese Funktion zu adaptieren und dabei kam folgender Entwurf heraus (den ich evtl. noch ändere oder erweitere)
class FILELOCK
{
private $filename;
public function __construct($fn)
{
$this->filename=$fh;
for ($i=0; !($fh=@fopen($fn, 'a')) && $i<10; $i++)
{
usleep(100);
}
if (!$fh) return false;
for ($i=0; @flock($fh, LOCK_EX) && $i<10; $i++)
{
usleep(100);
}
fclose($fh);
return true;
}
public function stop()
{
for ($i=0; !($fh=@fopen($this->filename, 'a')) && $i<10; $i++)
{
usleep(100);
}
if (!$fh) return false;
for ($i=0; @flock($fh, LOCK_UN) && $i<10; $i++)
{
usleep(100);
}
fclose($fh);
return true;
}
}
Nun stellen sich mir aber folgende Fragen:
1. Besteht die Sperre noch, wenn ich den Dateizeiger beendet habe (sonst wäre die Funktion ja sinnlos)?
2. Wird am Ende des Scriptes, wenn ich die Sperre nicht entferne, trotzdem die Sperre aufgehoben?
3. Wie finde ich heraus, ob die Sperre tatsächlich gesetzt wurde?
4. An welchem Maßstab mache ich fest, wie lange vor erneutem Öffne-/Sperrversuch gewartet werden soll?
Für Verbesserungsvorschläge und Hilfe jeglicher Art wäre ich sehr dankbar!