Mehrere Zugriffe gleichzeitig?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
benutzer
besucher
datei
daten
diffiziles thema
eintreten
erfolgen
erste
funktion
instanz
manual
parameter
schreien
script
skript
sperre
stellen
verriegelung
warten
-
hi!
Ich h?tte da einmal eine interessante Frage:
Ist es eigentlich m?glich, das der Fall eintritt, dass mehrere Besucher ein Skript zur gleichen Zeit ausf?hren, oder muss der der eine Millisekunde sp?ter gekommen ist warten bis der erste fertig ist?
Es k?nnten hierbei z.B. Probleme mit Dateien auftreten, wenn das Skript Daten in die Datei schrei bt!
Gru?
redcow -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hmm...so weit ich wei? ist das egal. Dann wird glaube ich einfach ein anderer Prozess im Sever gestartet der einfach nur das slebe macht so weit ich wei?...
-
Deswegen gibt es ja datenbanken, die verhintern das eben geschriebene daten von einem andren ge?ndert werden k?nnen.
stichwort zugriffsrechte.
Wenn es also nen datenbank mit Kunden gibt, und zwei mitarbeiter vollen Gleichzeitig den eindrack der adresse aktualiesieren ist das gleichzeitig nicht m?glich. -
Hi redcow,
deine Sorge ist berechtigt und du selbst bist daf?r zust?ndig, dass die zweite instanz vom script wartet, bis die erste mit dem Dateizugriff fertig ist. Mit flock kannst du eine Datei f?r die anderen Instanzen sperren. Dann m?ssen sie warten.
Google mal nach php flock, da gibt es genug Inforamtion, wie das im Detail geht.
Gr?sse,
limonero -
ja ich denke das script kann immer nur 1 Person versorgen. Aber das 2 Personen nun wirklich zu genau der gleich sekunde das script benutzen ist nicht sehr warscheinlich.
-
Hallo rote Kuh!
Das was du dir denkst kann wirklich eintreten.
Es gibt wie limonero schon sagte die Funktion "flock ()" daf?r.
Die meisten Informationen dazu wirst du aber wohl hier finden :
http://de2.php.net/flock
Bei weiteren Problemen frag am besten alopex, den der hat sich in letzter Zeit auch damit besch?ftigt und seine Scripte mit dieser Funktion verbessert. -
Hm, ja die Funktion flock ist mir bekannt aber ich h?tte dazu noch ein paar fragen:
Wie Funktioniert das genau mit flock?
Um die Datei zu sperren wendet man flock mit dem Datei-Handle als erstes Parameter an, dann ist sie gesperrt, aber wie wird sie wieder entsperrt?
Durch das schlie?en des Dateihandles (fclose) oder automatisch bei der Skriptbeendung?
Wenn flock auf eine Datei angewendet wurde und der n?chste Besucher will w?rend flock noch aktiv ist das Skript ws auf die Datei zugreift aufrufen, wird das Skript an der Stelle wo fopen aufgerufen angehalten und wenn der andere Benutzer fertig ist fortgesetzt oder es wird gleich abgebrochen was ich mir nicht wirklich vorstellen kann.
Gru?
redcow -
Deine Fragen werden auf php.net ausreichend beantwortet :
http://de2.php.net/flock
lock() arbeitet mit handle, welcher ein existierender Dateizeiger sein muss. Der [zweite] Parameter operation bestimmt die Art der Verriegelung und kann einen der folgenden Werte annehmen:
*
Um eine verteilte, nur lesende Verriegelung zu erhalten, setzen Sie operation auf LOCK_SH (bzw. 1 vor PHP 4.0.1).
*
Um eine exklusive, nur schreibende Verriegelung zu erhalten, setzen Sie operation auf LOCK_EX (bzw. 2 vor PHP 4.0.1).
*
Um eine Verriegelung freizugeben (lesend oder schreibend), setzen Sie operation auf LOCK_UN (bzw. 3 vor PHP 4.0.1).
*
Wenn Sie Zugriffe w?hrend der Verriegelung durch flock() erlauben wollen, f?gen Sie LOCK_NB (bzw. 4 vor PHP 4.0.1) zu operation hinzu.
Gibt bei Erfolg TRUE zur?ck, im Fehlerfall FALSE.
-
Mahlzeit redcow!
Hm, ja die Funktion flock ist mir bekannt aber ich h?tte dazu noch ein paar fragen:
Wie Funktioniert das genau mit flock?
Um die Datei zu sperren wendet man flock mit dem Datei-Handle als erstes Parameter an, dann ist sie gesperrt, aber wie wird sie wieder entsperrt?
Durch das schlie?en des Dateihandles (fclose) oder automatisch bei der Skriptbeendung?
Wenn flock auf eine Datei angewendet wurde und der n?chste Besucher will w?rend flock noch aktiv ist das Skript ws auf die Datei zugreift aufrufen, wird das Skript an der Stelle wo fopen aufgerufen angehalten und wenn der andere Benutzer fertig ist fortgesetzt oder es wird gleich abgebrochen was ich mir nicht wirklich vorstellen kann.
O.O flock() ist ein sehr diffiziles Thema. Kannst dich ja mal hier:
http://forum.de.selfhtml.org/archiv/2005/5/t107059/#m665534
in die Thematik einlesen.
Das File-Locking unter PHP nennt man "advisory locking", also "empfehlendes" File-Locking. Auf gut deutsch bist du darauf angewiesen, dass alle PHP-Scripts, die auf eine Datei zugreifen, auch flock() einsetzen. Wenn nur ein Script das nicht tut, war die ganze Vorsorge f?r den A****.
Au?erdem musst du beachten, dass Lese- und Schreiboperationen nur dann stattfinden d?rfen, wenn das File "gelock(e)t" wurde. Also nicht:
$fh = fopen($file);
$blubb = fgets($fh);
flock(...);
Ein Schlie?en des Dateihandles mit fclose() sollte den Lock ebenfalls wieder aufheben (laut PHP-Manual). Ob das auch bei der Scriptbeendung automatisch geschieht, kann ich dir nicht sagen, da ich nicht wei?, wie flock() intern funktioniert. Ich stelle es mir aber so vor, dass eine Liste im Hauptspeicher gehalten wird, die alle gesetzten Locks mit ihren Eigent?mer-Scripts enth?lt. Wird ein Script beendet, werden auch die dazugeh?rigen Locks ung?ltig. Das ist aber nur eine Vermutung.
Man kann flock() auch in einem "nicht-blockierenden" Modus betreiben, dann dient es als reine Abfrage, ob eine Datei gerade gerade gesperrt oder frei ist. Allerdings ist das PHP-Manual nicht sehr gut geschrieben -- was diesen Befehl angeht.
Was auch noch wichtig ist: Lesen (LOCK_SH) k?nnen mehrere PHP-Scripts gleichzeitig (Multitasking eben), aber Schreiben und damit Daten ver?ndern (LOCK_EX) darf eben immer nur ein Script. Und wenn schon ein LOCK_EX besteht, geht auch kein LOCK_SH mehr. Sonst k?nnte der ja verst?mmelte Daten lesen, weil gerade welche ver?ndert wurden.
MfG
alopex -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage