CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
26.02.2006, 21:19:23
|
Anfänger
|
|
Registriert seit: Aug 2003
Ort: Leutkirch im Allgäu
Beiträge: 79
|
|
fopen() ohne Überschreiben
Hallo zusammen,
hab da mal ein Problem(?) mit fopen().
Wenn ich eine Datei mit fopen() mit dem Parameter a+ öffne, heißt das ja, daß der Zeiger auf den Beginn der Datei gesetzt wird und ab da geschrieben wird. Allerdings wird der bisherige Dateiinhalt überschrieben, nicht der neue Text eingefügt. Gibt's da einen Parameter, den ich nicht kenne, damit das funktioniert oder muß ich immer den Inhalt der Datei sichern und wieder an das Neue hinten anhängen?
Danke für eure Hilfe!
Grüße, Heppi.
|
26.02.2006, 21:26:38
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: fopen() ohne Überschreiben
Zitat:
Zitat von Heppi
Wenn ich eine Datei mit fopen() mit dem Parameter a+ öffne, heißt das ja, daß der Zeiger auf den Beginn der Datei gesetzt wird und ab da geschrieben wird.
|
woher hast du das? im handbuch finde ich folgendes:
Zitat:
'a+': Öffnet die Datei zum Lesen und Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
|
quelle
ach, und so lange du uns deinen quellcode vorenthälst, können wir deinen fehler auch nicht finden.
|
26.02.2006, 21:48:32
|
Anfänger
|
|
Registriert seit: Aug 2003
Ort: Leutkirch im Allgäu
Beiträge: 79
|
|
AW: fopen() ohne Überschreiben
Oh, sorry. Das war mein Fehler. Natürlich meinte ich r+.
PHP-Code:
$log_datei = fopen('log.txt', 'r+');
flock($log_datei, LOCK_EX);
fputs($log_datei, $log_inhalt);
flock($log_datei, LOCK_UN);
fclose($log_datei);
Rufe ich diesen Quellcode mit $log_inhalt = '11111' auf und danach nochmal mit $log_inhalt = '222', steht in log.txt folgendes: '22211'. Ich hätte aber gerne '22211111'.
Gibt's da 'ne Möglichkeit ohne erst die Datei komplett auszulesen, das Ganze dann zusammenzuhängen und wieder abzuspeichern?
Grüße, Heppi.
|
26.02.2006, 23:22:07
|
Junior Member
|
|
Registriert seit: Apr 2005
Beiträge: 309
|
|
AW: fopen() ohne Überschreiben
Wäre das komplizierter, als das, was Du da tust?
Auf das bißchen Daten einlesen kommt es doch auch nicht an!
Stehen die Daten tatsächlich in einer Zeile?
|
27.02.2006, 07:56:43
|
Anfänger
|
|
Registriert seit: Aug 2003
Ort: Leutkirch im Allgäu
Beiträge: 79
|
|
AW: fopen() ohne Überschreiben
Zitat:
Zitat von Giz
Wäre das komplizierter, als das, was Du da tust?
|
Nee, eigentlich nicht. Aber ich habe nach einem Ausweg gesucht, weil das Skript in unregelmäßigen Abständen Probleme bereitet, für die ich keine Erklärung habe.
Ich habe mir so ein log-Skript gebastelt, welches die Besucher meiner Seiten mitloggt. Das sieht im wesentlichen folgendermaßen aus:
PHP-Code:
//Datei öffnen, auslesen und in $log_inhalt abspeichern
... // abzuspeichernde Daten ermitteln
$log_inhalt = "$datum|||$zeit|||$ip|||$last_site|||$browser|||$browser_version|||$bs|||||$log_inhalt";
if(substr($log_inhalt, -5) == '|||||')
$log_inhalt = substr($log_inhalt, -strlen($log_inhalt), -5);
$chmod_flag = 0;
if(file_exists($log_file))
$chmod_flag = 1;
$log_datei = fopen($log_file, 'w');
flock($log_datei, LOCK_EX);
fputs($log_datei, $log_inhalt);
flock($log_datei, LOCK_UN);
fclose($log_datei);
if($chmod_flag == 0)
chmod($log_file, 0777);
$general_inhalt = "$general_zaehler_stand|||$datum|||$general_tageszeit_gesamt|||$general_wochentage_gesamt|||$general_monate_gesamt|||$general_browser_gesamt|||$general_bs_gesamt";
$general_datei = fopen($general_file, 'w');
flock($general_datei, LOCK_EX);
fputs($general_datei, $general_inhalt);
flock($general_datei, LOCK_UN);
fclose($general_datei);
Ich habe eine Datei (steht in $log_file), welche automatisch jeden Monat neu angelegt wird (soll übergroße Dateien vermeiden). In dieser werden verschiedene Informationen abgelegt. Das Skript wird jedesmal aufgerufen, wenn jemand auf die entsprechende Seite klickt.
Zusätzlich werden generelle Informationen in $general_file abgelegt.
Ab und zu kommt es bei mir jetzt vor, daß plötzlich der ganze Inhalt der Datei weg ist und nur noch der neueste Eintrag drin steht. Was kann das sein? Sind das Probleme beim Auslesen der Datei?
Zitat:
Zitat von Giz
Stehen die Daten tatsächlich in einer Zeile?
|
Ja.
Grüße, Heppi.
|
27.02.2006, 11:27:07
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: fopen() ohne Überschreiben
Zitat:
Zitat von Heppi
Ab und zu kommt es bei mir jetzt vor, daß plötzlich der ganze Inhalt der Datei weg ist und nur noch der neueste Eintrag drin steht.
|
Scriptfehler: zeitgleiche Zugriffe auf das selbe Script.
Das ist der Tod jedes Billiggästebuchs und jedes Newbie-Counters, die die Vorteile eines DBMS einfach nicht begreifen wollen.
|
27.02.2006, 11:29:04
|
Anfänger
|
|
Registriert seit: Aug 2003
Ort: Leutkirch im Allgäu
Beiträge: 79
|
|
AW: fopen() ohne Überschreiben
Zitat:
Zitat von meikel
Scriptfehler: zeitgleiche Zugriffe auf das selbe Script.
Das ist der Tod jedes Billiggästebuchs und jedes Newbie-Counters, die die Vorteile eines DBMS einfach nicht begreifen wollen.
|
Durch die Geschichte hier
PHP-Code:
flock($general_datei, LOCK_EX);
flock($general_datei, LOCK_UN);
vermeide ich doch aber einen gelichzeitigen Zugriff auf die Geschichte, oder!?
|
27.02.2006, 11:31:30
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: fopen() ohne Überschreiben
Zitat:
Zitat von Heppi
vermeide ich doch aber einen gelichzeitigen Zugriff auf die Geschichte, oder!?
|
Du siehst doch, daß es ab und zu mal in die Hose geht.
|
27.02.2006, 11:38:42
|
Anfänger
|
|
Registriert seit: Aug 2003
Ort: Leutkirch im Allgäu
Beiträge: 79
|
|
AW: fopen() ohne Überschreiben
Zitat:
Zitat von meikel
Du siehst doch, daß es ab und zu mal in die Hose geht.
|
Jetzt ist ein DBMS ja so gesehen aber auch nur ein Treiber, welcher die Zugriffe und alles auf die Datenbank verwaltet. Wie sieht da dann die unterste Treiberschicht aus? Wie wird hier vermieden, daß zwei gleichzeitige Zugriffe stattfinden?
|
27.02.2006, 12:36:45
|
Junior Member
|
|
Registriert seit: Apr 2005
Beiträge: 309
|
|
AW: fopen() ohne Überschreiben
Ich benutze für ein einfaches Skript nicht einmal
PHP-Code:
flock($general_datei, LOCK_EX);
flock($general_datei, LOCK_UN);
und habe trotz diverser gleichzeitiger Zugriffe nie eine Datei gelöscht bekommen.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 03:59:23 Uhr.
|