Martin Vejvar: Frage zu CGI und SUBMIT

Hallo !
Ich programmiere (noch nicht sehr lange) in PERL, es geht alles ganz gut, ich habe aber eine grundsätzliche Frage:
Wenn ich ein Skript habe, das etwas in eine Datei am Server schreibt, wird es dann problematisch wenn 2 User "zufällig" gleichzeitig das Skript ausführen? Wie programmiere ich am besten, daß immer nur 1 User gleichzeitig auf eine Datei schreiben kann (oder überprüfen das Webserver gar automatisch) ?
Dieses Problem tritt ja wohl auch auf wenn jemand z.B. 2x auf den  "Submit" Knopf meines Formular  klickt, wie fange ich sowas ab ?

Über Antworten oder Links zu Problemlösungen würde ich mich sehr freuen !
:)
Martin

  1. Hallo Martin!

    Wenn ich ein Skript habe, das etwas in eine Datei am Server schreibt, wird es dann problematisch wenn 2 User "zufällig" gleichzeitig das Skript ausführen?

    Ja, ganz recht! Du kannst eine Datei mit der Funktion flock sperren.
    Schau im perldoc nach unter perlfunc ;-) Dort steht die Syntax genau beschrieben.

    Dieses Problem tritt ja wohl auch auf wenn jemand z.B. 2x auf den  "Submit" Knopf meines Formular  klickt, wie fange ich sowas ab ?

    Nicht zwingend. Nur wenn in einem Zeitpunkt zwei Prozesse auf deine Datei zugreifen wollen, also mit open() die Datei öffnen wollen.

    Mit derselben Funktion kannst du die Datei, wenn du mit dem reinschreiben fertig bist auch wieder freigeben für den nächsten Prozess. Ob das ganze aber unter Windows funktioniert kann ich nicht sagen!

    lg bernhard

  2. Moin,

    es sind 2 verschiedene Dinge von denen du sprichst.

    1. Doppelklick auf Submit abfangen - nach einem Vorschlag von Wolfgang Wiese (xwolf) mach ich das so: alle Inputs verkette ich miteinander und beschreibe damit eine Datei, vorher prüfe ich jedoch ob genau derselbe Kram schon in dieser Datei steht - das wäre bei einem Doppelklick der Fall - damit ist das Script zuende.

    2. Gemeinsamen Dateizugriff behandeln - Flock funktioniert nicht auf jedem System (im Zweifelsfalle Provider befragen) es gibt jedoch auch da andere Möglichkeiten. Ich mach das z.B. so dass ich eine Datei umbenenne bevor diese beschrieben wird, vorher schaut das Script natürlich erst ob die Datei vorhanden ist und wartet bis zum Timeout was festgelegt ist. Dieses Verfahren ist plattformunabhängig.

    Wie immer und überall hat so alles seine Vor- und Nachteile...

    Ein schönes Pfingstfest! Rolf