Yadgar: Frage zum Sperren von Dateien

High!

Seitenzugriffszähler, die zweite:

McCarty schreibt in seinen Hinweisen zu flock() folgendes:

"Den Prozessen wird niemals der Zugriff auf Dateien, sondern nur der Zugriff auf Sperren verwehrt. Deshalb kann ein Prozess, der nicht versucht, eine Datei zu sperren, auf die Datei zugreifen, selbst wenn ein anderer Prozess eine exklusive Sperre der Datei angefordert und gewährt bekommen hat."

Wie sollte dies auch möglich sein - sämtliche zugreifenden Benutzer verwenden doch dasselbe serverseitige Skript, und wenn dort einmal flock(LOCK_EX) verwendet wurde, kann ein solche Situation doch gar nicht eintreten - oder täusche ich mich?

Bis bald im Khyberspace!

Yadgar

  1. Hallo!

    Wie sollte dies auch möglich sein - sämtliche zugreifenden Benutzer verwenden doch dasselbe serverseitige Skript, und wenn dort einmal flock(LOCK_EX) verwendet wurde, kann ein solche Situation doch gar nicht eintreten - oder täusche ich mich?

    Sie verwenden zwar dasselbe Script aber unterschiedliche Instanzen davon.

    mfg
      frafu

    1. High!

      Sie verwenden zwar dasselbe Script aber unterschiedliche Instanzen davon.

      Wie muss ich mir das konkret vorstellen? Benutzer 1 ruft Instanz A des Skripts auf, kann mit LOCK_EX Sperre errichten. Benutzer 2 ruft Instanz B auf, kann aber selbst keine Sperre mehr errichten, da es sich um LOCK_EX (statt LOCK_SH) handelt und Benutzer 1 alleine sperren darf - und folglich greift Benutzer 2 dann doch auf die Datei zu?!?

      Bis bald im Khyberspace!

      Yadgar

    2. Moin!

      Hallo!

      Wie sollte dies auch möglich sein - sämtliche zugreifenden Benutzer verwenden doch dasselbe serverseitige Skript, und wenn dort einmal flock(LOCK_EX) verwendet wurde, kann ein solche Situation doch gar nicht eintreten - oder täusche ich mich?

      Sie verwenden zwar dasselbe Script aber unterschiedliche Instanzen davon.

      Dieser Hinweis ist nicht zielführend.

      PHP verwendet kooperatives (bzw. 'advisory' - hinweisendes) Locking. Sprich: Wenn alle mitmachen, funktioniert's. Wenn jemand aus der Reihe tanzt, geht's vermutlich schief.

      Wenn es also zwei Skripte gibt, die auf "demo.txt" zugreifen wollen, und das eine Skript nutzt Locking, das andere aber nicht, kann es zwar beliebig viele Instanzen des ersten Skripts geben, die parallel zugreifen _wollen_ - durch das Locking wird das aber verhindert.

      Das zweite Skript hingegen, was sich ums Locking nicht schert, weil kein flock() benutzt wurde (warum auch immer, typisch wäre: "vergessen") kann die Datei einfach öffnen und verändern, obwohl das erste Skript Locks gesetzt hat. Und damit mächtig Ärger verursachen.

      Und genau so ist der Hinweis im Buch auch geschrieben.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Hi,

        PHP verwendet kooperatives (bzw. 'advisory' - hinweisendes) Locking. Sprich: Wenn alle mitmachen, funktioniert's.

        Jedenfalls sofern die jeweilge Server-Umgebung dies überhaupt unterstützt.

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!