Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Arbeiten mit Dateien in Bezug auf flock (sperren und freigeben)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Arbeiten mit Dateien in Bezug auf flock (sperren und freigeben)

    Hi,

    Es geht darum dass ein Script mit Dateien arbeitet und ich möglichst keine Probleme mit der Nebenläufigkeit haben will, wenn mehrere Leute ein Script gleichzeitig ausführen.

    In meine Beispiel geht es darum eine Datei zu schreiben. Während des Schreibens soll diese gesperrt werden. Hier derzeit mein Code:

    PHP-Code:
    $fp fopen($filename"w+");
    if (
    $fp)
    {
       
    flock($fpLOCK_EX);
       
    fwrite($fp$new_content);
       
    flock($fpLOCK_UN);
       
    fclose($fp);
    }
    else
    {
       
    // try again
       
    $fp fopen($filename"w+");
       if (
    $fp)
       {
          
    flock($fpLOCK_EX);
          
    fwrite($fp$new_content);
          
    flock($fpLOCK_UN);
          
    fclose($fp);
       }
       else
       {
          
    // und hier nocht ein weiteres mal
       
    }

    Meine Fragen Quasi, die ich mit Hilfe der PHP Manual nicht beantworten konnte:

    1. Ist das so bullshit dass ich 3x hintereinander versuche den Code auszuführen? Oder würde 1x ausreichen?

    2. Nun habe ich gesehen, dass es bei flock den dritten Parameter nutzen kann. Bevor der Nutzer warten muss, würde ich hier gerne abbrechen. Allerdings ist mir nicht ganz klar, wie ich es richtig integriere. In der PHP Manual gibt es dafür leider kein Beispiel.

    Das wars auch schon. Freue mich auf Feedback.

  • Manko10
    antwortet
    @Phlegma: du kannst noch den Parameter LOCK_NB zu $operation hinzufügen:
    PHP-Code:
    flock($fileLOCK_EX LOCK_NB$wouldblock);
    if (
    $wouldblock) {
        die(
    'Would block');

    Soweit ich weiß, gibt $wouldblock true zurück, wenn flock() das Skript blockieren müsste, um einen Lock zu setzen. Da flock() in diesem Falle aber auf die Auflösung des aktuellen Locks warten (also blockieren) würde, sollte noch LOCK_NB addiert werden, um den Wert von $wouldblock im Falle eines Falles gleich zu bekommen.

    Einen Kommentar schreiben:


  • Phoscur
    antwortet
    Drei verschachtelte IFs? Hört sich wirklich nicht so elegant an. Wahrscheinlich kannst du das besser in eine WHILE Schleife packen und bedarfsweise aussteigen.
    *grad nochmal einen Blick ins Manual geworfen*
    Da ist ja ein Beispiel (in den Kommentaren), wie man das gut anlegt.
    Was das &$wouldblock angeht bin ich auch überfragt. Keines der Kommentare enthält eine gescheite Verwendung und das Handbuch drückt sich auch nicht gerade einfach aus.
    Wahrscheinlich müsste man das einfach mal testen.
    PHP-Code:
    flock($fileLOCK_EX$wb);
    if (
    $wb) {
        die(
    'File would block');

    Einen Kommentar schreiben:

Lädt...
X