PHP sperren / sicherstellen, dass ein bestimmtes Skript nur einmal ausgeführt wird

9

Ich versuche, ein PHP-Skript zu schreiben, das sicherstellen will, dass nur eine einzelne Instanz zu einem bestimmten Zeitpunkt ausgeführt wird. All diese Gespräche über verschiedene Arten der Sperrung und die Rennbedingungen usw. usw. geben mir die Willies.

Ich bin verwirrt, ob Lock-Dateien der Weg zu gehen sind, oder Semaphoren, oder MySQL-Sperren verwenden, oder usw. usw. usw.

Kann mir jemand sagen:

a) Was ist der richtige Weg dies zu implementieren?

AND

b) Verweisen Sie mich auf eine PHP-Implementierung (oder etwas, das einfach auf PHP portiert werden kann?)

    
Keith Palmer Jr. 31.01.2012, 16:55
quelle

5 Antworten

1
%Vor%     
tpham 27.06.2015 08:55
quelle
0

Sie können sich für die Lösung entscheiden, die am besten zu Ihrem Projekt passt. Die zwei einfachen Möglichkeiten, dies zu erreichen, sind das Sperren von Dateien oder das Sperren von Datenbanken.

Für Implementierungen der Dateisperrung, überprüfen Sie Ссылка

Wenn Sie bereits eine Datenbank verwenden, erstellen Sie eine Tabelle, generieren Sie ein bekanntes Token für dieses Skript, fügen Sie es dort ein und entfernen Sie es nach dem Ende des Skripts. Um Probleme bei Fehlern zu vermeiden, können Sie Ablaufzeiten verwenden.

    
Guilherme Viebig 31.01.2012 17:18
quelle
0

Vielleicht könnte das für Sie funktionieren,

Ссылка

    
Warren.S 24.01.2013 13:17
quelle
0

Wenn Sie PHP unter Linux verwenden und ich denke, der praktischste Weg ist:

%Vor%

Eine andere Möglichkeit besteht darin, die Datei zu markieren und den Rückruf zu beenden. Der Exit-Callback stellt sicher, dass das File-Flag auf 0 zurückgesetzt wird, auch wenn die php-Ausführung schwerwiegende Fehler enthält.

%Vor%     
talsibony 07.11.2015 13:02
quelle
0

Eine Möglichkeit besteht darin, die php-Funktion flock mit einer Dummy-Datei zu verwenden, die als Watchdog fungiert.

Wenn am Anfang unseres Jobs die Datei ein LOCK_EX Flag auslöst, können Sie den Vorgang beenden oder warten.

Php Flock Dokumentation: Ссылка

Für diese Beispiele muss zuerst eine Datei namens lock.txt erstellt werden.

Beispiel 1 , wenn ein anderer Zwillingsprozess ausgeführt wird, wird er ordnungsgemäß beendet, ohne erneut zu versuchen, und gibt eine Statusmeldung aus.

Es wird der Fehlerzustand ausgelöst, wenn die Datei lock.txt nicht erreichbar ist.

%Vor%

Beispiel 2 möchten wir, dass der Prozess auf eine Ausführung nach der Warteschlange wartet, falls vorhanden:

%Vor%

Es ist auch möglich mit fopen in x Modus, indem Sie eine Datei erstellen und löschen, wenn das Skript endet.

  

Erstellen und öffnen Sie nur zum Schreiben; Platziere den Dateizeiger an der   Anfang der Datei. Wenn die Datei bereits existiert, rufen Sie den Aufruf fopen () auf   wird fehlschlagen, indem Sie FALSE

zurückgeben      

Ссылка

    
Cryptopat 30.01.2018 19:35
quelle

Tags und Links