Anstatt file(), readfile() benutzen um Datein einzulesen

IR-Bastian

Mitglied
Hallo Leutz,
also ich würde´gerne mit readfile anstatt file eine (txt) Datei in ein Array einlesen, so dass ich diese dann zeilen weise abarbeiten kann.
Hat einer eine Idee?
wenn ich :

PHP:
$test = readfile("test.txt");

schreibe bekomme ich nur den Inhalt der Datei angezeigt.
Dies sollte aber in einem Array dann stehen.
Dankööö
Bastian
 
aus dem PHP Manual:
readfile()
Liest den Inhalt einer Datei und schreibt ihn in den Ausgabepuffer.

file()
Die Funktion file() ist identisch mit readfile(), außer dass die eingelesene Datei als Array zurückgegeben wird.


Muss man verstehen warum du readfile statt file nehmen möchtest wenn die andere funktion doch genau das tut was du möchtest?
 
Jaja, bei php.net war ich auch schon ;).

Also wenn ich auf die Datei die ich einlesen möchte ein File() mache, dann sagt der Server mir an die Datei wär zu gross.(ich kann an dem Memory nix umstellen)

Mit readfile kann ich mir jedoch die ganze Datei anzeigen lassen - also hoffe ich da einen kleinen Trick machen zu können um die Datei - ganz ähnlich wie bei file() doch einlesen zu können!
*trickytricky*

PS: Hehe, da habt ihr zweí schon gedacht: "Easy Antwort!"
 
Man findet mehrere Einträge zum auslesen von Text-Dateien hier in der Forum-Suche, mehrere 100 000 bei google und auf php.net ein paar Beispiele und Beschreibungen der Funktionen...

EDIT: Zu deinem Problem, man kann meines Wissens nach nicht mit readfile() einen Teil der Datei ausgeben lassen, da die Datei ja sofort zum Ausgabepuffer geschickt wird. read() geht hin, schreibt die Datei erst in einen Array und dann wird ein Teil zusätzlich ausgewählt und an den Puffer geschickt (du benötigst also etwas mehr speicher)
Aber hast du vielleicht mal ini_set('memory_limit', '32M'); probiert? evtl. geht das ;)
 
Zuletzt bearbeitet:
Wenn die Files groß sind solltest du auf jeden Fall fopen und dann fgets() verwenden um die einzelnen Zeilen zu lesen. Und so dein File Sequentiell einlesen und verarbeiten.

Um größere Files einlesen zu können "einfach" die Memory Size hoch ist ja auch nicht der richtige weg. Da wenn die Dateien "noch größer" werden es wieder angepasst werden muss. Und die Speicherlast wird in die höhe getrieben auf dem Server.

Der Trick währe mit ob Outputbuffer es doch in eine Variable zu bekommen und mit explode in Zeilen zu Zertrennen, aber das kann nicht funktionieren da die Variable dann wieder den gleichen Maximalgrößen unterliegt.
 
Zuletzt bearbeitet:
Wenn Inhalte von TXT-Dateien wirklich sehr groß sind und man immer nur Zeilenweise etwas benötigt und womöglich noch viel mit explode() arbeitet, sollte man auf eine Datenbank z.B. MySQL umsteigen ;) Dort hat man solche Problem nicht mehr (wenn man hier und da normalisiert und sich nicht all zu ungeschickt anstellt)

Eine, zwar nicht so gute, aber eine Alternative wäre, eine TXT-Datei gar nicht erst so groß werden zu lassen und stattdessen viele Kleine zu haben, die man nacheinander einliest und nach dem Ausgeben immer schön den Buffer wieder freigibt
 
Zuletzt bearbeitet:
Zurück