Portal > Foren > PHP > PHP-Programmierung > Dateien sperren
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 21.06.2006, 15:02 Nach oben    #1
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 122
Standard Dateien sperren

Ich bin gerade am schreiben von Funktionen zur Speicherung von Log-Einträgen. Dabei ist mir ein Problem in den Sinn gekommen.


Und zwar es ist möglich mit der Funktion flock() den gleichzeitigen Zugriff auf Dateien zu verhindern. Dabei sehe ich allerdings ein Problem. Wenn jetzt wirklich die Log-Datei noch gesperrt ist und das Script versuchen würde etwas da rein zu schreiben, würde ja dieser Log Eintrag verloren gehen.
Ich könnte natürlich den Script so schreiben, dass wenn dieser eine Eintrag nicht gespeichert werden kann, dass Script unterbricht und eine Fehlermeldung ausgibt. Allerdings ist es bei Log-Einträgen nicht Sinnvoll. Wenn wirklich viele User auf der Seite dann aktiv sind, wird diese Fehlermeldung dann andauernd auftauchen.


Also habt ihr hierzu vielleicht Ideen, wie man das am besten lösen kann?

Geändert von dago (21.06.2006 um 15:07 Uhr)
dago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2006, 15:48 Nach oben    #2
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.378
Standard

ich weiß ja nicht, was du da so logst, und wie wichtig das wirklich ist...

ich schlage dir vor, dass du dafür eine Datenbank wie zB mysql nimmst!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2006, 16:12 Nach oben    #3
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 122
Standard

Zitat:
Zitat von Jann Hendrik
ich schlage dir vor, dass du dafür eine Datenbank wie zB mysql nimmst!
Jop, das wehre eine Möglichkeit. Allerdings möchte die Fehlermeldungen unabhängig von der Datenbank loggen, da ich sonst wieder ein Problem hab. Ausserdem möchte ich die Query's die an die DB gesand werden auch mit loggen, damit ich wirklich sehe, was alles mein Script macht.
Eine andere Möglich ist das ganze per Mail zu versenden, aber das ist mir etwas zu viel.

Nach dem Manual funktioniert die Funktion flock() auch nicht auf allen Dateisystemen. Also muss oder will ich jetzt versuchen dazu eigene Funktion zu schreiben.

Geändert von dago (21.06.2006 um 16:15 Uhr)
dago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2006, 16:20 Nach oben    #4
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.378
Standard

eine Möglichkeit wäre eine Datei zu erstellen, wenn die Datei xyz.LOCK existiert, dann ist die log-Datei gerade gesperrt. Wenn sie wieder freigegeben wird, dann die Datei löschen ....

das stand aber die Tage hier schonmal woanders im Forum!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2006, 18:37 Nach oben    #5
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

Du könntest einen Cache machen mit dem namen time().tmp oder so.
Wenn das Log grade gesperrt ist, könntest du in den Cache schreiben.
Wenn ein weiterer Zugriff auf das Log gemacht wird und er ist erfolgreich, dann kannst du nach .tmp-Dateien suchen, sie nach dem Timestamp ordnen und dann an das Cache anhängen und anschließend löschen.
Danach trägst du dann deinen aktuellen Log ein.
Natürlich dauert das seine Zeit, aber dann hast du halt einen Rückstau bei vielen Usern, der sich aber wieder auflöst, wenn sich der Ansturm legt.

Jojo
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.06.2006, 19:21 Nach oben    #6
Jay
Gast
 
Beiträge: n/a
Standard

Unter Windows, Linux und FreeBSD funktioniert flock auf jeden Fall (bereits getestet). Deshalb solltest du es auch verwenden.

Die Sachen mit Dateien mit Zeitstempeln etc. zu schreiben ist einfach ineffizient und langsam. Datenbanken kannst du für sowas sowieso vergessen IMHO.

Was ist wenn ein Script schreiben will und ein anderes bereits schreibt. Willst du das Script warten lassen und nach 5ms noch mal versuchen zu lassen?

Was machst du wenn viele User auf dein Script zugreifen und ein Script nur schleppend zum Zug kommt? Flock würde das automatisch regeln d.h. du müsstes auch noch abspeichern in welcher Reihenfolge die Scripte zugreifen sollen.

Fakt ist, dass flock auf allen gängen Betriebsystemen funktioniert und die 1% an anderen Server Betriebsystemen auf denen PHP läuft/eingesetzt wird können glaube ich ignorierd werden, sofern dein Script nicht so oft wie Typo3 oder sonst was verwendet wird und auch dann ...

IMHO ist die ganze Diskussion darüber relativ sinnlos.

EDIT 1:
Ich habe mir jetzt die ganzen Threads noch mal durchgelesen. Ihr solltet alle bedenken, dass wir hier im ms Bereich sind und wenn du Dateien oder Datenbanken verwendest haufenweise Queries entstehen und das gleiche Problem noch einmal auftritt. Nämlich welches Script darf wann die Datenbankspalte updaten bzw. die temporäre Datei erneuern bzw. beschreiben!

Jay

Geändert von Jay (21.06.2006 um 19:25 Uhr)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.06.2006, 21:08 Nach oben    #7
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 122
Standard

Vielen dank für eure bis her genannten Lösungen/Anregungen! Hab leider erst jetzt wieder Zeit mich dem Script zu wiedmen.


@Jay: Allein nur mit flock, kann ich nicht arbeiten, da mir sonst einige Einträge fehlen würden.
Zitat:
Zitat von Jay
Was machst du wenn viele User auf dein Script zugreifen und ein Script nur schleppend zum Zug kommt? Flock würde das automatisch regeln d.h. du müsstes auch noch abspeichern in welcher Reihenfolge die Scripte zugreifen sollen.
Ich versteh das nicht ganz. Was regelt oder was muss flock den hier regeln?




@Jojo: Die Idee hat mir bei der mit flock Variante gefehlt! So würde es funktionieren.

Eine andere Idee währe, wenn man das Schreiben in die Datei erst beim beenden des Scripts machen würde. Dann könnte man dem User die Seite ausgeben (damit er nicht warten muss) und erst dann schaun ob die Datei gesperrt ist, warten ... und dann Schreiben. Im Fehlerfall, dann doch eine E-Mail an den Webmaster verschicken.



Interessant währe natürlich noch für mich, wie man das auch ohne flock realisieren könnte. (Auch wenn das nicht sein muss.) Da mit nur anlegen einer Temporären Sperr-Datei ist es ja noch nicht getan. Denn es könnten wieder mehrere Scripte gelichzeitig die Datei anlegen...

Ok sehr unwahrscheinlich, aber möglich

Schonmal DANKE an alle!

Grüße dago
dago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.06.2006, 22:09 Nach oben    #8
Jay
Gast
 
Beiträge: n/a
Standard

Zitat:
Allein nur mit flock, kann ich nicht arbeiten, da mir sonst einige Einträge fehlen würden.
Wieso? Auf welchen OS hast du den die Applikation laufen? Windows 95 Server 8bit Edition?

Zitat:
Ich versteh das nicht ganz. Was regelt oder was muss flock den hier regeln?
Antwort:
Zitat:
Interessant währe natürlich noch für mich, wie man das auch ohne flock realisieren könnte. (Auch wenn das nicht sein muss.) Da mit nur anlegen einer Temporären Sperr-Datei ist es ja noch nicht getan. Denn es könnten wieder mehrere Scripte gelichzeitig die Datei anlegen...
Zitat:
Eine andere Idee währe, wenn man das Schreiben in die Datei erst beim beenden des Scripts machen würde. Dann könnte man dem User die Seite ausgeben (damit er nicht warten muss) und erst dann schaun ob die Datei gesperrt ist, warten ... und dann Schreiben. Im Fehlerfall, dann doch eine E-Mail an den Webmaster verschicken.
Du hast wohl das HTTP Protokoll und eben dieses Request - Response Model nicht ganz verstanden.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.06.2006, 23:20 Nach oben    #9
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 122
Standard

*ggg*

@Jay: Könnte es sein, dass wir an einander vorbei reden?

Ich vermute du hast mein Problem nicht verstanden:
Zitat:
Und zwar es ist möglich mit der Funktion flock() den gleichzeitigen Zugriff auf Dateien zu verhindern. Dabei sehe ich allerdings ein Problem. Wenn jetzt wirklich die Log-Datei noch gesperrt ist und das Script versuchen würde etwas da rein zu schreiben, würde ja dieser Log Eintrag verloren gehen.
Nämlich sobald die Log-Datei mit flock() gesperrt wurde, kann ja nicht mehr darein geschrieben werden ausser von der Stelle von wo aus die Datei gesperrt wurde. (Was ja auch Sinn der Sache ist.) Allerdings wenn mehrere User gleichzeitig den selben Script ausführen, kann und darf man ja nicht gleichzeitig die Datei beschreiben. Deswegen muss man entweder warten bis die Datei freigegeben wird, was bei Log-Dateien nicht besonders sinnvoll ist oder wie @Jojo schrieb ein Cache angelegt werden.

Deswegen arbeite ich jetzt mit flock und Cache der Einträge!

Zitat:
Zitat von Jay
Du hast wohl das HTTP Protokoll und eben dieses Request - Response Model nicht ganz verstanden.
Auch wenn ich mich zu den Anfängern zähle, denke ich die funktionsweise verstanden zu haben.

Ich meine das soll mit der Funktion register_shutdown_function() möglich sein. Ihre ich mich da?
dago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
EasyEclipse zeigt keine Tasks/Problems aus Dateien mehr an robo47 Eclipse 6 02.09.2007 04:44
mod_rewrite - RewriteRegel um Dateien in Verzeichnis zu simulieren Ben Tools, Server, Betriebssysteme 4 20.06.2007 17:16
Dateien aus SVN 1 auschecken, in SVN 2 einchecken, keine eigenen Änderungen vorhanden Ben Tools, Server, Betriebssysteme 2 21.03.2007 18:53
Cache leeren um mit file Dateien zu durchsuchen Tryzero PHP-Programmierung 12 12.03.2007 10:13
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45