Schrift
[thread]959[/thread]

Datei sperren: flock() (Seite 2)

Leser: 1


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
sid burn
 2007-07-11 18:03
#317 #317
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
@opi
Und trotzdem gibt es noch ein Problem denn das CGI Skript läuft ja keine 10Min etc. für solange wie der Benutzer die Datei "bearbeitet". ;)

Sondern vielleicht nur 1 sek. oder deutlich weniger, und dann erscheint es nicht mehr im /proc.

Mir würde auch keine Lösung einfallen ausser so wie es der TE gemacht hat. Eine zusätzliche File wo der Zugriff drin steht, und dann für xx Minuten den Zugriff für das Bearbeiten der Seite Sperren. Bis die Zeit eben vorbei ist, oder die Seite fertig bearbeitet wurde.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
bloonix
 2007-07-11 18:07
#318 #318
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sid burn,11.07.2007, 16:03]Und trotzdem gibt es noch ein Problem denn das CGI Skript läuft ja keine 10Min etc. für solange wie der Benutzer die Datei "bearbeitet". ;)

Sondern vielleicht nur 1 sek. oder deutlich weniger, und dann erscheint es nicht mehr im /proc.[/quote]
Ja dann wartet man einfach die 1 Sekunde bis der Lock aufgehoben ist ;)
Das Schreiben und Lesen in ein eigenes Logfile dauert mindestens
genauso lang, wenn nicht noch länger.

Edit: aber ich gebe dir Recht. So wie es der TE macht scheint es noch am
besten, obwohl es natürlich lahm ist. :)\n\n

<!--EDIT|opi|1184162982-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
sid burn
 2007-07-11 18:12
#319 #319
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=opi,11.July.2007, 16:07][quote=sid burn,11.07.2007, 16:03]Und trotzdem gibt es noch ein Problem denn das CGI Skript läuft ja keine 10Min etc. für solange wie der Benutzer die Datei "bearbeitet". ;)

Sondern vielleicht nur 1 sek. oder deutlich weniger, und dann erscheint es nicht mehr im /proc.[/quote]
Ja dann wartet man einfach die 1 Sekunde bis der Lock aufgehoben ist ;)
Das Schreiben und Lesen in ein eigenes Logfile dauert mindestens
genauso lang, wenn nicht noch länger.[/quote]
Ich glaub du verstehst das problem nicht.

Ein CGI Skript führt eine Funktion "bearbeiten" durch. Liefert den benutzer eine Datei die er jetzt bearbeiten kann. Diese Datei soll jetzt für 10 Min gesperrt sein, so dass nur der User der auf "Bearbeiten" gegangen ist, diese Datei verändern kann.

Allerdiengs bleibt das Skript ja keine 10 Minuten aktiv. Sondern läuft vielleicht nur 1 Sekunde.

Du musst also eine Persitente Möglichkeit schaffen eine File zu Locken über die Laufzeit des Programmes heraus. Da hilft dir weder flock() noch /proc/* weiter. Da eine Datei ja trotzdem weiterhin gesperrt sein kann. Obwohl der Prozess schon gar nicht mehr läuft.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
bloonix
 2007-07-11 19:12
#320 #320
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sid burn,11.07.2007, 16:12]Ich glaub du verstehst das problem nicht.[/quote]
Ach herje, was du alles so glaubst :unclesam:
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
sid burn
 2007-07-11 19:32
#321 #321
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=opi,11.July.2007, 17:12][quote=sid burn,11.07.2007, 16:12]Ich glaub du verstehst das problem nicht.[/quote]
Ach herje, was du alles so glaubst :unclesam:[/quote]
Och, eigentlich bin ich nicht leichtgläubig.

Aber dann verstehe ich nicht was du mit dem Herumfuchteln in /proc/ etc. willst. :p
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
bloonix
 2007-07-11 19:39
#322 #322
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sid burn,11.07.2007, 17:32]Och, eigentlich bin ich nicht leichtgläubig.

Aber dann verstehe ich nicht was du mit dem Herumfuchteln in /proc/ etc. willst.  :p[/quote]
Ich versuche auch abwägige Lösungen aufzuzeigen, denn wenn keiner so
richtig weiß wie man etwas richtig lösen kann, dann hilft es oft Vorschläge
zu sammeln. Was am Ende von diesen Lösungen gebraucht werden kann,
muss der Programmierer selbst entscheiden.

Wie man auch meistens nachlesen kann, schreibe ich auch immer dazu
das die Lösung umständlich, abwägig oder kompliziert ist, aber das gehört
eben auch dazu.

Ich nehme das manchen Lesern auch garnicht übel, dass sie mich im
ersten Moment nicht verstehen, was ich da aufzeigen möchte, aber dafür
dürfen wir ja alle los motzen und vielleicht auch nachfragen. So far nehme
ich es dir auch nicht übel. Warum auch... sind ja hier eine Familie :)\n\n

<!--EDIT|opi|1184168438-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
sid burn
 2007-07-11 19:50
#323 #323
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
Ich versuche auch abwägige Lösungen aufzuzeigen, denn wenn keiner so richtig weiß wie man etwas richtig lösen kann, dann hilft es oft Vorschläge zu sammeln.

Das ist immer gut. :)

Quote
Was am Ende von diesen Lösungen gebraucht werden kann,
muss der Programmierer selbst entscheiden.

Das sollte klar sein. :)

Quote
Wie man auch meistens nachlesen kann, schreibe ich auch immer dazu das die Lösung umständlich, abwägig oder kompliziert ist, aber das gehört eben auch dazu.

Klar gehört das dazu.
Aber wie schaut den jetzt deine Lösung genau aus? *g*

Ein Benutzer Y klickt auf Bearbeiten, und dann? Im /proc/* nachschauen, wo der Prozess von Benutzer X schon lange nicht mehr existiert, aber trotzdem ein File lock von 10 Minuten auf einer Datei besteht?

Oder möchtest du das dein aktueller Prozess da rein geht und dann die Umgebungsvariable REMOTE_USER ausliest und diese dann in einer Datei schreiben? Anstatt einfach $ENV{REMOTE_USER} zu nutzen?

Oder was willst du nun genau machen? :D\n\n

<!--EDIT|sid burn|1184169133-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
bloonix
 2007-07-11 20:07
#324 #324
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sid burn,11.07.2007, 17:50]Ein Benutzer Y klickt auf Bearbeiten, und dann? Im /proc/* nachschauen, wo der Prozess von Benutzer X schon lange nicht mehr existiert, aber trotzdem ein File lock von 10 Minuten auf einer Datei besteht?[/quote]
Dafür sorge tragen, dass der Prozess eben noch existiert und die Session
des Benutzers an diesen Prozess binden. Sonst klappt das natürlich nicht.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
nepos
 2007-07-11 20:08
#325 #325
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du willst eine eigene Lockfile für die jeweils von einem Benutzer bearbeitete Seite anlegen, so wie ich das sehe. Darin kannst du ablegen wer und wann er das Lock angefordert hat.
Wenn nun jemand anderes zugreifen will, passt der Benutzer nicht zusammen. Wenn du dann noch ein Timeout hast, kannst du die Sperre in deinem Skript trotzdem umgehen, wenn z.B. seit dem Lock 10 Minuten vergangen sind.
So ähnlich macht es meines Wissens Dokuwiki.

Für die Zugriffe auf dieses Lockfile wirst du dann aber wieder flock() brauchen. Ansonsten könnten sich mehrere Instanzen deines CGIs beim Anlegen und Schreiben dieser Datei in die Quere kommen.
pq
 2007-07-11 21:44
#326 #326
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
http://www.korrekturen.de/beliebte_fehler/abwaegig.html\n\n

<!--EDIT|pq|1184175897-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2007-07-10 15:25.