Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Filepointer mit ftell()
Antwort
 
Themen-Optionen
Alt 24.10.2006, 12:16   Nach oben    #1
Talwin
Neuer Benutzer
 
Registriert seit: 24.10.2006
Beiträge: 10
Standard Filepointer mit ftell()

Hallo zusammen,

ich will eine (bereits vorhandene, nichtleere) Textdatei öffnen und dann ans Ende der Datei neuen Inhalt anhängen, allerdings will ich dabei die letzten 5 Bytes überschreiben, also muss ich ja den Filepointer an diese Stelle bewegen, bevor ich mit fwrite was reinschreibe. Allerdings bin ich auf folgendes Problem gestossen:
PHP-Code:
$fp fopen($locationsfilede'a+');
echo(
"<p>Filepointer: ".ftell($fp)."</p>"); 
ergibt die Ausgabe
Filepointer: 0

wieso? a+ öffnet laut manual die Datei mit Filepointer am Ende der Datei.
Wenn ich nun versuche den Filepointer an die gewünschte Stelle zu verschieben, mittels:
PHP-Code:
fseek ($fp, -5,"SEEK_END"); 
gibt mir ftell trotzdem noch 0 zurück.

Kurios finde ich nun, dass trotzdem (auch nach dem fseek) der Inhalt nach:
PHP-Code:
fwrite($fp'blabla'); 
trotzdem ans Ende der Datei angehängt wird.
Wo liegen meine (Denk)fehler?

Ausgeführt wird das alles auf einem Webspace mit IIS unter Windows, PHP 4.3.3 steht zur Verfügung.

Danke im Vorraus für die Hilfe.

Gruss Talwin
Talwin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 12:29   Nach oben    #2
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.616
Standard

Hallo,
willkommen im Forum.

Ich denke, dass das hier dein Problem lösen sollte, oder?
Zumindest, was das fseek() angeht.
PHP-Code:
fseek ($fp, -5,SEEK_END); 
Da erhalte ich eine Ausgabe != 0, sofern in der Datei auch was drin ist .. und mehr als 5 Bytes.

Wo liegt der Unterschied.
Das Manual sagt
Code:
int fseek ( resource handle, int offset [, int whence] )
Der dritte Parameter ist also vom Typ integer und kein string, wie du es angegeben hast.

Grüße, Ben.

Geändert von Ben (24.10.2006 um 14:53 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 12:38   Nach oben    #3
Talwin
Neuer Benutzer
 
Registriert seit: 24.10.2006
Beiträge: 10
Standard

Cool, danke.

Warum aber gibt mir ftell nach dem fopen 0 zurück?
Das versteh ich immer noch nicht...

Nachtrag:
Unter Selfphp wird im Beispiel
PHP-Code:
fseek ($fp2,"SEEK_CUR"); 
angegeben, deswegen hab ichs auch in "" gesetzt.

Geändert von Talwin (24.10.2006 um 14:48 Uhr).
Talwin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 12:48   Nach oben    #4
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.616
Standard

Zitat:
Zitat von Talwin Beitrag anzeigen
Warum aber gibt mir ftell nach dem fopen 0 zurück?
Im Manual steht zwar was dazu, wenn man ftell auf Resourcen anwendet, die mittels fopen() mit http oder ftp erzeugt wurden, aber da es ja auch in anderen Fällen bei der 0 bleibt ... pff ... keine Ahnung .
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 12:52   Nach oben    #5
Talwin
Neuer Benutzer
 
Registriert seit: 24.10.2006
Beiträge: 10
Standard

Hmpf, hab das jetzt mal getestet:
PHP-Code:
$fp fopen($locationsfilede'a+');
fseek ($fp, -5SEEK_END);
fwrite($fp'blablabla'); 
hängt den Text leider immer noch ans Ende der Datei an, die letzten 5 Bytes werden nicht überschrieben...

Jetzt bin ich mit meinem Latein am Ende.
Talwin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 12:59   Nach oben    #6
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.616
Standard

Machet einfach so
PHP-Code:
<?php

$file 
'test.xy';

$content file_get_contents($file);

$content  substr($content0strlen($content) - 4);
$content .= 'blablabla';

file_put_contents($file$content);

?>
*g*
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 13:04   Nach oben    #7
Talwin
Neuer Benutzer
 
Registriert seit: 24.10.2006
Beiträge: 10
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Machet einfach so
PHP-Code:
<?php

$file 
'test.xy';

$content file_get_contents($file);

$content  substr($content0strlen($content) - 4);
$content .= 'blablabla';

file_put_contents($file$content);

?>
*g*
Oh, die beiden Funktionen gibts auf selfphp noch gar net in der Funktionsreferenz. Gut, dass ich die jetzt auch weiss .

Ich wrerds mal so ausprobieren. Danke für die Geduld.
Talwin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 13:10   Nach oben    #8
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.616
Standard

Zitat:
Zitat von Talwin Beitrag anzeigen
Oh, die beiden Funktionen gibts auf selfphp noch gar net in der Funktionsreferenz.
file_put_contents() erfordert PHP 5. Ansonsten einfach mal in den Thread hier schauen.

Nutze lieber ein Manual/eine Doku, die regelmäßig aktualisiert wird.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 13:42   Nach oben    #9
Talwin
Neuer Benutzer
 
Registriert seit: 24.10.2006
Beiträge: 10
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
file_put_contents() erfordert PHP 5.
Hmm, hab ja leider nur PHP 4.3.3 zur Verfügung...
Mit PHP 5 haette ich ja alles mit XML dateien gemacht. Leider ist auf dem Server keine XML Unterstützung vorhanden (ist ja bei PHP 4 leider nicht standardmäßig vorhanden).

Naja, da muss ich mir nen anderen Weg überlegen...
Talwin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 13:45   Nach oben    #10
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.616
Standard

Zitat:
Zitat von Talwin Beitrag anzeigen
Zitat:
Zitat von Ben Beitrag anzeigen
file_put_contents() erfordert PHP 5.
Hmm, hab ja leider nur PHP 4.3.3 zur Verfügung...
Mit PHP 5 haette ich ja alles mit XML dateien gemacht. Leider ist auf dem Server keine XML Unterstützung vorhanden (ist ja bei PHP 4 leider nicht standardmäßig vorhanden).

Naja, da muss ich mir nen anderen Weg überlegen...
Liest du meine Beiträge?

Zitat:
Ansonsten einfach mal in den Thread hier schauen.
Da findest du 'ne Funktion, die dir Daten in eine Datei schreibt.


[Nachtrag]
Hier geht es zwar um C, aber da scheint das ja genauso zu funktinieren, wie du es eigentlich möchtest, ne?
http://www.galileo-press.de/openbook...002A231F01418C

Und C und PHP haben ja oftmals sehr viel Ähnlichkeit, demnach .. hmm, ich hab nun auch schon was bei Google gesucht, aber irgendwie bin ich nicht wirklich fündig geworden.

[EDIT]
Am Betriebssystem kann es nicht liegen.
Linux online, Windows lokal .. beide Male die gleiche Ausgabe.

Geändert von Ben (24.10.2006 um 16:20 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 18:42   Nach oben    #11
Byrel
Benutzer
 
Registriert seit: 24.10.2006
Beiträge: 90
Standard

Hallo!

Zu deinem Problem mit ftell:
Es liegt an deinem Öffnungsmodus. ftell kann mit append-only Öffnungsmodi nichts anfangen.

Genaueres findest du hoffentlich im Manual www.php.net/ftell und bei diesem Bug Report http://bugs.php.net/bug.php?id=24071

Verwende lieber einen anderen Öffnungsmodus oder grade auf eine Version unter 4.2.3 down.

Zu deinem Problem mit fseek:

Das hat ebenfalls was mit deinem Öffnungsmodus zu tun

Zitat:
Zitat von php.net/fseek
Note: If you have opened the file in append ("a" or "a+") mode, any data you write to the file will always be appended, regardless of the file position.
Es ist ja auch nur logisch so. Deshalb lieber als Öffnungsmodus w (oder was auch immer du brauchst) verwenden und mit fseek ($fp, -5, SEEK_END) die letzten 5 Bytes überschreiben.

Hoffe ich konnte dir helfen!

Schöne Grüße aus Graz,
Byrel

Geändert von Byrel (24.10.2006 um 18:43 Uhr). Grund: Tippfehler
Byrel ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2006, 18:50   Nach oben    #12
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.616
Standard

Mir hast du beim Verständnis auf jeden Fall geholfen.
Danke.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.10.2006, 08:39   Nach oben    #13
Talwin
Neuer Benutzer
 
Registriert seit: 24.10.2006
Beiträge: 10
Standard

Ja, danke euch, hat mir weiter geholfen.
__________________
Schachklub Bickenbach
Talwin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen 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

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.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:50 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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