Hello Mr. Transchel,
// flock funktioniert auf PHP-Ebene. Das bedeutet, dass alle Zugriffe über den selben Mechanismus funktionieren müssen:
// flock($fp,2);
//-----
$lock_ok=flock($fp,2);
if ($lock_ok)
{
$erfolg = fputs($fp,$daten);
flock($fp,3);
}
else
{
fehlermeldung("Datei wird schon bearbeitet");
// an dieser stelle könnte man zum beispiel eine schleife machen, die mit delay() solange probiert, bis die datei schreibbar ist.
}
Du meine Güte, du hast zwar recht, aber glaubst du im Ernst, dass Stefan solchen Traffic hat? Im ernsthaften Einsatz muss man das natürlich so machen, aber wie gesagt, solange uns Stefan nicht sagt zu welchen Zweck genau er das braucht, gehe ich mal davon aus, dass ein solcher Mechanismus unnötig ist.
Kostet uns doch ein Lächeln. Warum nicht einfach mal was Gutes in PHP bauen. Die Perl-Freaks lachen doch sowieso immer über uns ;-)
Ich wollte eigentlich hier auch nur sicher gehen, dass Du den Mechanismus von flock() in PHP durchschaust. Die Datei wird nämlich nicht gelockt, sondern es wird in einer flock-Tabelle ein Eintrag hinterlegt. Ich bin mir noch nicht einmal sicher, dass der ohne unlock (also flock($fp,3)) wieder beseitigt wird. Mir wäre hier ein Durchgriff auf das Betriebssystem lieber, auch wenn das nicht ganz "sauber" ist. Linux muss doch auch über Locking-Mechanismen verfügen.
Übrigens sollte man zur Vermeidung von Deadlocks keine Endlosschleifen programmieren. Fünf Lockingversuche sollten da also reichen. Ich denke, PHP wird selber schon mehrmals nachschauen (in Millisekunden-Abständen), bevor es die Anfrage ablehnt (false zurückgibt).
Langsam wird's ja. Teamwork zahlt sich eben immer aus.
LGaBS
Tom