php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.07.2005, 09:46   #1 (permalink)
Gast
 
Beiträge: n/a
Standard Datei mehrmals öffnen und schließen in einem Skript

Hallo allerseits! Ich häng im Moment an einem sehr merkwürdigen Fehler, der es mir unmöglich macht die aktuelle Komponente weiterzuentwickeln:

Ich habe eine simple Funkion, die einfach nur eine Datei öffnet, mit fopen, etwas reinschreibt, mit fwrite, und sie dann wiederzumacht, mit fclose. Wenn ich diese Funktion mehrmals aufrufe, schreibt sie nur den Inhalt des letzten Aufrufes in die Datei. Sprich wenn ich viermal vier verschiedene Zeilen eintragen will, macht sie die Datei trotzdem nur einmal auf und schreibt nur das letzte rein. Was kann ich tun, damit die selbe Datei auch mehrmals in einem Aufruf des Skriptes geöffnet, beschrieben und geschlossen wird?

PHP-Code:
<?php
function schreibe($pfad,$it) {
    
$dt fopen($pfad,"w");
    
fwrite($dt,$it);
    
fclose($dt);
}
?>
Das Problem ist dabei, wenn ich etwas in eine Datei hineinschreibe, sie danach gleich wieder auslese und den Inhalt verändern bzw gleich danach erneut eintragen will, greift nur die letzte Änderung.

Also zum Beispiel:

PHP-Code:
<?php
schreibe
("datei.pra","Das ist ein Text");
$alter_inhalt lese("datei.pra");

/*Hier manipulier ich dann die $alter_inhalt 
 *zum Beispiel zu "Das ist nun der veränderte Text"
 */

schreibe("datei.pra",$alter_inhalt);
?>
Danach muss ich diese Funktion noch mehrmals in aufrufen, bei der Funktion lese(); sagt sie jedoch, in der Datei steht ncihts drin. Erst der letzte Aufruf funktioniert dann. Dieser Fehler tritt immer uaf, ist also nicht auf die Art und Weise bezogen, wie ich das in einem Skript verwende.

mfg
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.07.2005, 10:14   #2 (permalink)
Erfahrener Benutzer
 
Registriert seit: 23.02.2005
Beiträge: 211
TheIfrit
Standard

du musst den dateizeiger bei jedem Öffnen der Datei auf das Dateiende setzen, sonst schreibt der immer bei Position 0 und das ist der anfang der Datei
http://de2.php.net/manual/de/function.fopen.php

benutze
PHP-Code:
<?php
fopen
($pfad,"a");
//oder
fopen($pfad,"a+");
?>
__________________
Wie lautet die adäquate Antwort auf "ihr benehmt euch wie kleine Kinder!" ?

"Er hat Angefangen!"
TheIfrit ist offline  
Alt 14.07.2005, 11:11   #3 (permalink)
Gast
 
Beiträge: n/a
Standard

Das brächte mir überhaupt nichts, im Gegenteil, dann hätt ich den einen Text den ich da drin haben will viermal drin, in jeder Version.

Wie ich gesagt habe lese ich den Inhalt der Datei vorher aus und lege ihn in einer Variabel ab, diese Variabel will ich dann in die Datei schreiben, und zwar nicht hinten angehängt, sondern alleine, da die Variabel verändert wird. Dann komm ich manchmal in die Situation, dass ich noch im selben Skript, die Datei erneut aufmachen, den Inhalt auslesen und ihn wieder hineinschreiben muss, das geht aber nciht, weil PHP die DAtei nur einml aufzumachen scheint.

Dieses Skript demonstriert das Problem:

PHP-Code:
<?php
$p 
"datei.pra";

//Ich lese den Inhalt das 1. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);

//Jetzt muss ich den Inhalt verändern
$i "etwas vollkommen anderes";

$d fopen($p,"w");
fwrite($d,$i);
fclose($d);

//Jetzt tritt zum Beispiel ein Spezialfall ein, 
//da muss ich es nochmal machen:
//Ich lese den Inhalt das 2. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);

//Jetzt muss ich den Inhalt erneut verändern
$i "davor was dazu".$i;

$d fopen($p,"w");
fwrite($d,$i);
fclose($d);
?>
 
Alt 14.07.2005, 11:25   #4 (permalink)
Erfahrener Benutzer
 
Registriert seit: 23.02.2005
Beiträge: 211
TheIfrit
Standard

Zitat:
Das Problem ist dabei, wenn ich etwas in eine Datei hineinschreibe, sie danach gleich wieder auslese und den Inhalt verändern bzw gleich danach erneut eintragen will, greift nur die letzte Änderung.
Wenn du die Datei aufmachst, den inhalt ausliest, dann veränderst und wieder reinschreibst, ist es doch logisch dass das alte weg ist.

wenn ich "Hallo Welt"
mit "Hallo Welt2" überschreibe und dann nochmal aufmache und mit "Hallo Welt3" überschreibe ist es doch logisch, dass da nur "Hallo Welt3" drinsteht.

Irgendwie versteh ich das Problem jetzt nicht.
__________________
Wie lautet die adäquate Antwort auf "ihr benehmt euch wie kleine Kinder!" ?

"Er hat Angefangen!"
TheIfrit ist offline  
Alt 14.07.2005, 12:54   #5 (permalink)
Gast
 
Beiträge: n/a
Standard

Das das aufmachen zwischendrin nicht funktioniert, das HalloWelt2 geht nicht auslesen, er macht es dann nicht auf, probier das Skript oben, er sagt dann das die Datei leer ist, obwohl du grade was reingeschireben hast und wenn du den Auszug alleine nimmst, gehts auch, aber wenst es zweimal machst nimma.

Es geht nciht darum nur zur überschreiben was drin steht, es soll vorher ausgelesen werden. Wenn ich zum Beispiel so hab:

#?Dateien
/home/benutzer/irgendwas
#!Dateien

und ich will da eine DAtei dazuscheriben zu:

#?Dateien
/home/benutzer/irgendwas
/home/benutzer/nochetwas
#!Dateien

muss ich das vorher auslesen, dann die Datei darein bringen mit nem preg_match, nem Array usw und dann muss ich es erst eintragen. Bis hierher funktioniert das wenns nur so weit geht, will ich aber jetzt im selben Skript noch eine Datei dazuschreiben, ignoriert er einfach die ganze Prozedur bis hierhin und macht nur die letzte Änderung an der Datei, sprich wenn ich jetzt eine drite Datei dareintu, müsste er die DAtei aufmachen in der schon zwei drin stehen, und die dritte reingeben, wennst du die DAtei danach aber aufmachst steht nur die erste und die dritte drin, aber nciht die zweite. Egal wievile Züge man zwischendurch macht, er führt nur den letzten fwrite aus und sagt bei allen vorherigen das die Daeti leer ist (wenn man neu erstellt) oder er sagt gar ncihts und tut nur die letzte rein.
 
Alt 14.07.2005, 13:35   #6 (permalink)
Erfahrener Benutzer
 
Registriert seit: 23.02.2005
Beiträge: 211
TheIfrit
Standard

PHP-Code:
<?php
$p 
"datei.pra";

//Ich lese den Inhalt das 1. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);
echo 
$i.'
'
;
//Jetzt muss ich den Inhalt verändern
$i "etwas vollkommen anderes";
echo 
$i.'
'
;
$d fopen($p,"w");
fwrite($d,$i);
fclose($d);

//Jetzt tritt zum Beispiel ein Spezialfall ein,
//da muss ich es nochmal machen:
//Ich lese den Inhalt das 2. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);
echo 
$i.'
'
;
//Jetzt muss ich den Inhalt erneut verändern
$i "davor was dazu ".$i;
echo 
$i.'
'
;
$d fopen($p,"w");
fwrite($d,$i);
fclose($d);

//Jetzt tritt zum Beispiel ein Spezialfall ein,
//da muss ich es nochmal machen:
//Ich lese den Inhalt das 3. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);
echo 
$i.'
'
;
//Jetzt muss ich den Inhalt erneut verändern
$i $i." dahinter was dazu";
echo 
$i.'
'
;
$d fopen($p,"w");
fwrite($d,$i);
fclose($d);

//Jetzt tritt zum Beispiel ein Spezialfall ein,
//da muss ich es nochmal machen:
//Ich lese den Inhalt das 4. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);
echo 
$i.'
'
;
//Jetzt muss ich den Inhalt erneut verändern
$i $i." nochmal dahinter was dazu";
echo 
$i.'
'
;
$d fopen($p,"w");
fwrite($d,$i);
fclose($d);
?>
wenn ich das so mache funktioniert das bei mir einwandfrei... und ich habe nur die ausgaben dazwischen gepackt.

hab das aus spass mal auf 10 verlängert und es hat immer noch geklappt
__________________
Wie lautet die adäquate Antwort auf "ihr benehmt euch wie kleine Kinder!" ?

"Er hat Angefangen!"
TheIfrit ist offline  
Alt 14.07.2005, 13:43   #7 (permalink)
Gast
 
Beiträge: n/a
Standard

Wenn ich dein Skript da oben ausführe gibt er mit echo zwar das richtige aus, in der Datei steht aber nur das:

davo nochmal dahinter was dazu

Steht bei dir das richtige in der Datei, also:

TEXT
etwas vollkommen anderes
etwa
davor was dazu etwa
davo
davo dahinter was dazu
davo
davo nochmal dahinter was dazu

(TEXT war das was vorher in der Datei drin stand.)

Weißt du was? Ich glaub das liegt am filesize() Befehl, der ließt immer nur 4 Zeichen aus, so wie am Anfang der Datei nur 4 drin stehen von TEXT.
 
Alt 14.07.2005, 13:56   #8 (permalink)
Erfahrener Benutzer
 
Registriert seit: 23.02.2005
Beiträge: 211
TheIfrit
Standard

japp liegt am filesize... warum auch immer
__________________
Wie lautet die adäquate Antwort auf "ihr benehmt euch wie kleine Kinder!" ?

"Er hat Angefangen!"
TheIfrit ist offline  
Alt 14.07.2005, 14:22   #9 (permalink)
Gast
 
Beiträge: n/a
Standard

Aber er schreibt dir auch das selbe Kaudawelsch in die Datei?

Warums nit geht steth in der Doku^^:
Das Ergebnis dieses Funktionsaufrufes wird zwischengespeichert. Siehe clearstatcache() für weitere Einzelheiten.

So funzts:

PHP-Code:
<?php
$p 
"datei.pra";

//Ich lese den Inhalt das 1. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);
clearstatcache();
echo 
$i.'
'
;
//Jetzt muss ich den Inhalt verändern
$i "etwas vollkommen anderes";
echo 
$i.'
'
;
$d fopen($p,"w");
fwrite($d,$i);
fclose($d);
clearstatcache();

//Jetzt tritt zum Beispiel ein Spezialfall ein,
//da muss ich es nochmal machen:
//Ich lese den Inhalt das 2. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);
clearstatcache();
echo 
$i.'
'
;
//Jetzt muss ich den Inhalt erneut verändern
$i "davor was dazu ".$i;
echo 
$i.'
'
;
$d fopen($p,"w");
fwrite($d,$i);
fclose($d);
clearstatcache();

//Jetzt tritt zum Beispiel ein Spezialfall ein,
//da muss ich es nochmal machen:
//Ich lese den Inhalt das 3. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);
clearstatcache();
echo 
$i.'
'
;
//Jetzt muss ich den Inhalt erneut verändern
$i $i." dahinter was dazu";
echo 
$i.'
'
;
$d fopen($p,"w");
fwrite($d,$i);
fclose($d);
clearstatcache();

//Jetzt tritt zum Beispiel ein Spezialfall ein,
//da muss ich es nochmal machen:
//Ich lese den Inhalt das 4. mal aus
$d fopen($p,"r");
$i fread($d,filesize($p));
fclose($d);
clearstatcache();
echo 
$i.'
'
;
//Jetzt muss ich den Inhalt erneut verändern
$i $i." nochmal dahinter was dazu";
echo 
$i.'
'
;
$d fopen($p,"w");
fwrite($d,$i);
fclose($d);
?>
 
Alt 14.07.2005, 14:37   #10 (permalink)
Erfahrener Benutzer
 
Registriert seit: 23.02.2005
Beiträge: 211
TheIfrit
Standard

also bei mir steht das auf dem bildschirm
Code:
text 
etwas vollkommen anderes
etwas vollkommen anderes
davor was dazu etwas vollkommen anderes
davor was dazu etwas vollkommen anderes
davor was dazu etwas vollkommen anderes dahinter was dazu
davor was dazu etwas vollkommen anderes dahinter was dazu
davor was dazu etwas vollkommen anderes dahinter was dazu nochmal dahinter was dazu
und das steht am ende in der datei
Code:
davor was dazu etwas vollkommen anderes dahinter was dazu nochmal dahinter was dazu
wobei ich zugeben muss, ich hab mit
PHP-Code:
<?php
$i 
fread($d,filesize($p));
?>
gearbeitet

na das clearstatcache() werde ich mir mal merken :wink:
Wie hast das denn gefunden?
__________________
Wie lautet die adäquate Antwort auf "ihr benehmt euch wie kleine Kinder!" ?

"Er hat Angefangen!"
TheIfrit ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Hochgeladene Datei wird doppelt abgelegt thecracked PHP Tipps 2008 3 01.07.2008 16:31
Ordner Struktur auslesen bestimmte datei finden .... silverghost PHP Tipps 2005 3 24.05.2005 13:55
Includete Datei nicht gleich ausgeben Madden PHP-Fortgeschrittene 1 12.05.2005 00:19
aus php datei eine pdf datei erzeugen lassen raffnix PHP-Fortgeschrittene 5 04.02.2005 15:08
[Erledigt] mail versand mit anhang (-- fopen(), fread(), filesize() --) PHP Tipps 2005 5 29.01.2005 18:36
Idee zum Speichern einer Datei PHP Tipps 2005 6 10.01.2005 22:36
xfdf Datei mit PHP an eMail senden Problem: Leere Datei PHP Tipps 2004-2 1 07.12.2004 12:25
Dateien lesen und schreiben [mehr als: r,a,w]? PHP Tipps 2004 4 24.10.2004 18:53
Zeilenumbrüche & Neudatein mit PHP PHP Tipps 2004 5 21.10.2004 11:38
Datei mit php erzeugen Stümper PHP Tipps 2004 4 12.10.2004 12:51
php und ftp PHP Tipps 2004 4 07.10.2004 09:58
[Erledigt] datei editieren PHP Tipps 2004 1 10.09.2004 20:33
(ich schonwieder) Link seite automatisch imported_DJ Nuno PHP Tipps 2004 14 19.08.2004 17:42
Wie kann ich eine PHP Datei in eine HTML Datei umwandeln PHP Tipps 2004 2 12.08.2004 18:04
[Erledigt] Php skript upload problem! PHP Tipps 2004 2 30.06.2004 00:06

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
datei mehrmals öffnen, gleiches pdf zweimal öffnen, datei mehrfach öffnen, pdf zweimal öffnen, pdf datei mehrmals öffnen, gleiches pdf zweimal, ein programm mehrmal öffnen, selbe pdf datei zweimal öffnen, mehrmals selben link öffnen, eine pdf datei zweimal öffnen, php fwrite a schreibt doppel, pdf mehrmals öffnen, \gleiches pdf zweimal öffnen\, pdf dokument zweimal öffnen, gleiche pdf zweimal öffnen, clearstatcache not working, programm zweimal öffnen, fopen mehrmals, gleiche pdf mehrmals, fopen datei mehrmals öffnen

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.