Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Array in Datei abspeichern? (https://www.delphipraxis.net/96179-%5Bphp%5D-array-datei-abspeichern.html)

cruso 19. Jul 2007 21:00


[PHP] Array in Datei abspeichern?
 
Hi!

ich kann in PHP ja mit file() den Inhalt einer Datei Zeilenweise in ein Array gepackt bekommen... Wie ist es nun möglich Daten wieder Zeilenweise in einer Datei abzuspeichern? Also wie kann man ein Array zeilenweise in einer Textdatei abspeichern?


MfG
cruso

3_of_8 19. Jul 2007 21:16

Re: [PHP] Array in Datei abspeichern?
 
Delphi-Quellcode:
$fp=fopen($filename, "w+");
fwrite($fp, implode("\n", $arr));
fclose($fp);
Schreibt das Array $arr in die Datei mit Pfad $filename.

cruso 19. Jul 2007 21:18

Re: [PHP] Array in Datei abspeichern?
 
Zitat:

Zitat von 3_of_8
Delphi-Quellcode:
$fp=fopen($filename, "w+");
fwrite($fp, implode("\n", $arr));
fclose($fp);
Schreibt das Array $arr in die Datei mit Pfad $filename.

Danke! :-D

cruso 20. Jul 2007 10:44

Re: [PHP] Array in Datei abspeichern?
 
ok.... also ich habe das nun einmal so umgesetzt:

Code:
//...
Das Problem: Es ist wir keine neue Zeile erstellt. Alles wird in der ersten Zeile der Datei abgespeichert.


Was läuft falsch?

Nuclear-Ping 20. Jul 2007 10:53

Re: [PHP] Array in Datei abspeichern?
 
Bemüh doch einfach mal php.net: http://www.php.net/manual/de/function.fopen.php ;)

Zitat:

Tabelle 84. Liste von möglichen Modi für fopen() mit mode
mode Beschreibung
'r' Öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.
'r+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.
'w' Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert wird versucht sie anzulegen.
'w+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
'a' Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
'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.

DeddyH 20. Jul 2007 10:54

Re: [PHP] Array in Datei abspeichern?
 
Für Windows musst Du die Zeile
Code:
fwrite($tf, implode("\n", $log));
geringfügig umändern:
Code:
fwrite($tf, implode("\r\n", $log));

Nuclear-Ping 20. Jul 2007 11:01

Re: [PHP] Array in Datei abspeichern?
 
Ich glaub das liegt eher daran:
Code:
$fp=fopen($filename, "w+");
und
Zitat:

'w+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
Hatte bisher noch nie Probleme, mit \n unter Windoof.

DeddyH 20. Jul 2007 11:03

Re: [PHP] Array in Datei abspeichern?
 
Zitat:

Zitat von cruso
Das Problem: Es ist wir keine neue Zeile erstellt. Alles wird in der ersten Zeile der Datei abgespeichert.

Die Datei wird also angelegt ;)

generic 20. Jul 2007 11:32

Re: [PHP] Array in Datei abspeichern?
 
Du solltest lieber serialize verwenden.

http://de2.php.net/manual/de/function.serialize.php

Zitat:

serialize

(PHP 4, PHP 5)

serialize — Erzeugt eine speicherbare Repräsentation eines Wertes
Beschreibung
string serialize ( mixed $value )

serialize() gibt einen String zurück, der eine Byte-Stream-Repräsentation von value enthält, die beliebig gespeichert werden kann.

Diese Funktion dient der Speicherung oder Übergabe von PHP-Werten, ohne dass diese ihren Typ oder ihre Struktur verlieren.

Um eine serialisierte Zeichenkette wieder als PHP-Wert verfügbar zu machen, verwenden Sieunserialize(). serialize() kann mit allen Typen umgehen, ausgenommen mit dem resource-Typ. Sie können sogar Arrays serialisieren, die Referenzen auf sich selbst enthalten. Zirkelbezüge innerhalb des Arrays/Objekts, das Sie serialisieren, werden ebenfalls gespeichert. Alle anderen Referenzen gehen verloren.

Wenn Objekte serialisiert werden, versucht PHP die Methode __sleep() vor der Serialisierung aufzurufen. Dies erlaubt einem Objekt letzte "Aufräumaktionen", bevor es serialisiert wird. Ebenso wird die Methode __wakeup() aufgerufen, wenn das Objekt mittels unserialize() wiederhergestellt wird.

Anmerkung: Dies funktioniert nicht korrekt bis PHP 4.0.7.

Anmerkung: In PHP 3 werden Objekteigenschaften serialisiert, aber die Methoden gehen verloren. Diese Beschränkung wurde in PHP 4 aufgehoben, so dass sowohl Eigenschaften als auch Methoden wiederhergestellt werden können. Bitte lesen Sie den Abschnitt Objekte serialisieren des Kapitels Klassen und Objekte für weitere Informationen.

Es ist nicht möglich PHP-interne Objekte zu serialisieren.

noch_ein_hannes 20. Jul 2007 12:33

Re: [PHP] Array in Datei abspeichern?
 
Wie wäre es denn gleich mit der entsprechenden Funktion "error_log()"???

... man kann ja damit nicht nur Fehler protokollieren .... :-)

alcaeus 20. Jul 2007 13:04

Re: [PHP] Array in Datei abspeichern?
 
Zu serialize(): wenn er die Datei mit file() einlesen will, ist serialize schlecht.
Zum implode(): Erstens laesst file() die Zeilenumbrueche am Ende intakt, und loescht sie nicht weg. Ein implode('', $foo) sollte also reichen.

Lies die Datei doch einfach nochmal mit file() aus und ueberpruef, ob wirklich nur ein Element im Array drin ist. Was ein Editor anstellt, der keine gscheiden Zeilenumbrueche erkennt, kann dir eigentlich egal sein.

Greetz
alcaeus

DGL-luke 20. Jul 2007 13:08

Re: [PHP] Array in Datei abspeichern?
 
hallo,

einfach wäre es, so eine datei zu erstellen:

Code:
<?php
return array('a','b','c');
?>
die kann dann so geladen werden:

Code:
$arr = include('file.php');

cruso 20. Jul 2007 13:14

Re: [PHP] Array in Datei abspeichern?
 
also irgendwie gibt es jetzt viele viele Lösungen... nur welche funktioniert? Und was ist jetzt an meinem Code falsch bzw. was ist jetzt der tatsächliche Grund, dass es nicht klappt?

3_of_8 20. Jul 2007 13:16

Re: [PHP] Array in Datei abspeichern?
 
Unter welchem Betriebssystem läuft denn PHP? Windows? Unix? Mac OS?

cruso 20. Jul 2007 13:22

Re: [PHP] Array in Datei abspeichern?
 
Code:
//...

PHP läuft unter Windows (doch es sollte doch auf jeden fall möglich sein eine datei plattformunabhängig zu verändern)... außerdem klappt es ja im ersten fall...

Nuclear-Ping 20. Jul 2007 13:24

Re: [PHP] Array in Datei abspeichern?
 
Sorry, aber liest hier einer überhaupt richtig? :mrgreen:

--> http://www.delphipraxis.net/internal...=752554#752554

Wenn er die Datei mit w+ öffnet, ist es doch klar, dass da nur ein Eintrag drin steht, nämlich der, den er gerade geschrieben hat, da w+ die Größe der Datei auf 0 Bytes setzt. ;)

cruso 20. Jul 2007 13:28

Re: [PHP] Array in Datei abspeichern?
 
Zitat:

Zitat von Nuclear-Ping
Sorry, aber liest hier einer überhaupt richtig? :mrgreen:

--> http://www.delphipraxis.net/internal...=752554#752554

Wenn er die Datei mit w+ öffnet, ist es doch klar, dass da nur ein Eintrag drin steht, nämlich der, den er gerade geschrieben hat, da w+ die Größe der Datei auf 0 Bytes setzt. ;)

und warum funktioniert es dann beim ersten mal? ich kann eine zeile herauslöschen und das array danach abspeichern und es sind soviele zeilen in der datei wie das array elemente hat...

DeddyH 20. Jul 2007 13:33

Re: [PHP] Array in Datei abspeichern?
 
Zitat:

Zitat von Nuclear-Ping
Sorry, aber liest hier einer überhaupt richtig? :mrgreen:

http://www.delphipraxis.net/internal...=752554#752554

Wenn er die Datei mit w+ öffnet, ist es doch klar, dass da nur ein Eintrag drin steht, nämlich der, den er gerade geschrieben hat, da w+ die Größe der Datei auf 0 Bytes setzt.

Ich weiß nicht, was Du immer mit Deiner 0-Byte-Größe hast. Wenn er die Datei komplett neu erstellen will (eingelesen hat er sie ja bereits), ist es doch OK, die Größe auf 0 zu setzen. Tut er das nicht und der neu zu schreibende Inhalt ist kleiner als der alte, hat er noch "alten Müll" am Ende der Datei stehen.

cruso 20. Jul 2007 13:40

Re: [PHP] Array in Datei abspeichern?
 
Und wie würde es jetzt klappen?

DeddyH 20. Jul 2007 13:47

Re: [PHP] Array in Datei abspeichern?
 
Was soll denn diese Zeile bewirken?
Code:
fwrite($tf, $log_add);

Nuclear-Ping 20. Jul 2007 13:48

Re: [PHP] Array in Datei abspeichern?
 
Zitat:

Zitat von cruso
Das Problem: Es ist wir keine neue Zeile erstellt. Alles wird in der ersten Zeile der Datei abgespeichert.

Ok Ok, sorry. Hatte Tomaten auf den Augen. ;)

Funktionierts denn mit \r\n?

Zur Not mach halt ne Schleife, und schaue obs damit geht:
Code:
$f = fopen (..., "w+");
for ($a = 0; $a < count ($log); $a++)
  fputs ($f, $log[$a]);
fclose ($f);

cruso 20. Jul 2007 13:51

Re: [PHP] Array in Datei abspeichern?
 
ok... es funktioniert mit \r\n ... doch das wird nicht unter linux funktionieren oder? es sollte nämlich unter beiden systemem laufen...

sollte ich dann vorher testen welches system vorliegt und danach passend reagieren?

DeddyH 20. Jul 2007 13:54

Re: [PHP] Array in Datei abspeichern?
 
Bisher hatte ich noch keine Probleme mit \r\n, Linux ist ja kulant ;)

cruso 20. Jul 2007 13:57

Re: [PHP] Array in Datei abspeichern?
 
ah ok... dann kann ich das weiter verwenden. ich dachte schon ich muss hunderte male immer wieder checken welches OS vorliegt

Nuclear-Ping 20. Jul 2007 13:57

Re: [PHP] Array in Datei abspeichern?
 
Was ist damit? -> http://www.php.net/manual/de/function.fputs.php#6085

cruso 20. Jul 2007 14:09

Re: [PHP] Array in Datei abspeichern?
 
Und ihr seid sicher, dass /r/n auch unter Linux funzt?

Und wofür steht eigentlich dieses /r ?

DeddyH 20. Jul 2007 14:11

Re: [PHP] Array in Datei abspeichern?
 
\r steht für Carriage Return (Wagenrücklauf)

DGL-luke 20. Jul 2007 14:12

Re: [PHP] Array in Datei abspeichern?
 
\r = carriage return = #13, \n = linefeed = #10

php sollte eine kostante oder sowas haben, die dir den aktuellen linebreak zurückliefert, und JA, du solltest darauf achten.

noch_ein_hannes 20. Jul 2007 14:17

Re: [PHP] Array in Datei abspeichern?
 
Sicher ist es interessant das aktuelle Problem zu lösen, aber beim "eigentlichen" würde Dir die Funktion error_log sicher einiges an Arbeit abnehmen :-) Damit kannst Du einfach Zeilen an eine Datei anhängen ...

Delphi-Quellcode:
$arr = array('xyz', 'abc', 'efg');
foreach($arr as $val) error_log($val, 3, './log.txt');

cruso 20. Jul 2007 14:35

Re: [PHP] Array in Datei abspeichern?
 
ich mache es jetzt hier ohne array mit a+ beim fopen... und füge für die neue zeile \r\n hinzu...

alcaeus 20. Jul 2007 14:37

Re: [PHP] Array in Datei abspeichern?
 
Zitat:

Zitat von DGL-luke
php sollte eine kostante oder sowas haben, die dir den aktuellen linebreak zurückliefert, und JA, du solltest darauf achten.

Nein, er sollte nur darauf achten, immer dasselbe zu verwenden. Man beachte diesen Satz in http://de.php.net/file:
Zitat:

Returns the file in an array. Each element of the array corresponds to a line in the file, with the newline still attached.
Wie gesagt, implode('', $foo) und es sollte gehn. Was dann irgendwelche PITA-Windows-Editoren verbocken, ist nicht dein Problem. Und soweit ich weiss erkennt file() auch alle gaengigen Zeilenumbrueche.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz