Announcement

Collapse
No announcement yet.

Eine Art "Lock" zwischen mehreren PHP-Aufrufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eine Art "Lock" zwischen mehreren PHP-Aufrufen

    Hallo miteinander,

    ich überlege mir derzeit ein Konzept für folgendes Szenario :

    Da bei der Version des Internet Explorers in der Firma scheinbar ein Fehler mit HttpRequest (AJAX) POST vorliegt, kann ich nur GET nutzen. Deswegen muss ich für eine große Anfrage viele kleine Anfragen losschießen. Um die Datenbank zu entlasten, will ich nun die Ergebnisse einer Abfrage (<100 Zeilen) in einem Textfile speichern, um die nicht in den vielen Requests jedes mal wieder gegen die Datenbank zu schießen. Dieses File soll jeweils neu geschrieben werden, wenn es älter als 2 Minuten ist.

    Mein Problem ist nun, dass ich das File nicht neu schreiben will, während noch ein anderer Aufruf darauf zugreifen will bzw. den Zugriff verhindern, solange das File gerade geändert wird. Das heißt, ich bräuchte eine Art Lock, um dem Script mitzuteilen, dass es warten soll, bis das Neuschreiben fertig ist. Ich habe mir nun überlegt, dass ich das über ein weiteres File abwickeln kann - aber auch das kann bei einem ungünstigen Timing zu Problemen führen, z.B. wenn nun gerade 2 Scripte exakt gleichzeitig feststellen, dass sie das File nun updaten wollen oder eines gerade am Lesen ist während das Neuerstellen angestoßen wird. Ein unabhängiges Script, was das File alle 2 Minuten updatet ist auch eher suboptimal, da es auch mal sein kann, dass das File mehrere Stunden nicht benötigt wird - dafür dann alle 2 Minuten einen Request an die Datenbank schicken ist auch irgendwie Overhead.

    Von daher bitte ich um Ideen, wie man das ganze möglichst sicher und ressourcenschonend gestalten kann.

    Ich hoffe, ich habe das Problem verständlich erläutert...

    Danke und beste Grüße,

    Compu

  • #2
    wenn du auf einem unix-system arbeitest, könntest du den weg über fifo-pipes probieren. die machen glaub ich genau das, was du suchst.

    du schießt den request dort rein und ein anderes skript kann dann darauf zugreifen und nach dem fifo-prinzip die requests wieder rausholen.

    vielleicht gibts auch noch eine bessere alternative, aber das schoss mir gerade als erstes durch den kopf

    Comment


    • #3
      Danke schonmal für den Tip - ist allerdings ein Windows-Apache-Server :0

      Comment


      • #4
        nun, dann probiere http://php.net/manual/en/function.flock.php
        aber auf keinen fall vergessen, den lock wieder raus zu nehmen

        und bei jedem aufruf irgendwie mit einer while file_locked abwarten, bis ein eventuelles script den lock aufgehoben hat.

        Comment

        Working...
        X