TXT-Datei nicht per fopen öffnen...
Marcel
- php
Hallo,
ich möchte aus einer text-datei (txt) Zeilen auslesen was ja kein Problem ist.
Nur wenn ich die Datei mit fopen() öffne, dann liest er die komplette Datei in ein Array.
Das heisst ich habe je nach größe meiner Datei eine enorme Ladezeit meiner seite.
Kann man mit php nicht direkt z.b. Zeile 3 einer Text-Datei auslesen, ohne das sie erst im vollen Umfang geladen wird ?
Denn wenn ich eine Datei mit 10 kb habe und nur die 3. Zeile lesen will, die allein ca. 1 kb gross, brauch ich denn rest doch nicht.
( MySQL kann ich aufm Server nicht nutzen, sinn meiner Aktion ist: Ich möchte aus einer Datei mit 31 Zeilen, jeden Tag eine anzeigen lassen)
Vielen Dank im Vorraus für euer bemühen.
mfg
Marcel
Nur wenn ich die Datei mit fopen() öffne, dann liest er die komplette Datei in ein Array.
fopen() liest gar nichts.
Kann man mit php nicht direkt z.b. Zeile 3 einer Text-Datei auslesen, ohne das sie erst im vollen Umfang geladen wird ?
Schonmal einen Blick in die Anleitung geworfen und nach einer Funktion gesucht, die eine Zeile einliest? Die Übersicht http://de.php.net/manual/de/ref.filesystem.php ist zwar etwas länger, aber wer die Bedienung der Suchfunktion seines Browsers beherrscht, sollte in Sekundenschnelle etwas Passendes finden können.
fopen() liest gar nichts.
Sorry, hab mich falsch ausgedückt...
file() //->Liest eine Datei in ein array .
Habe folgendes Script:
$gewünschteZeile = fgets($fp,1024);//$fp ist der Dateizeiger von fopen()
//Lesen aller Zeilen einer Textdatei
$fp = fopen("deine.txt","r"); // Datei öffnen
if ($fp)
{
while(!feof($fp))//Solange bis der Dateizeiger am Ende der Datei ist
{
$zeile = fgets($fp,100);//Einlesem der Zeilen
echo"Inhalt:$zeile <p>";//Ausgabe
}
fclose($fp); // Datei schließen
}
else
{
echo "Datei wurde nicht gefunden"; // Sollte Datei nicht vorhanden sein
}
Ich weiss aber nie wie lang eine Zeile ist um den Dateizeiger gleich auf die z.b. 3. Zeiele zu setzen, dazu vieleicht hilfe ?
mfg
Marcel
(Ps. Script so gefunden, habe kaum Ahnung von php -:) )
Wieso machst du es dir so schwer? Nimm doch require oder include, wenn du einen Dateiinhalt darstellen willst. Oder willst du auch in die Datei schreiben? Weil dann müstest du den Weg gehen den du gerade angesprochen hast!
Aber zum darstellen eines Dateiinhaltes benutze ich "require($Datei);". Zum schreiben natürlich fopen, fputs und fclose
Wieso machst du es dir so schwer? Nimm doch require oder include, wenn du einen Dateiinhalt darstellen willst. Oder willst du auch in die Datei schreiben? Weil dann müstest du den Weg gehen den du gerade angesprochen hast!
Aber zum darstellen eines Dateiinhaltes benutze ich "require($Datei);". Zum schreiben natürlich fopen, fputs und fclose
Oooh, entschuldigung - ich habs übersehen - du willst eine bestimmte Zeile auslesen. Tut mir leid - require ist nicht das was du suchst!
while(!feof($fp))//Solange bis der Dateizeiger am Ende der Datei ist
{
$zeile = fgets($fp,100);//Einlesem der Zeilen
echo"Inhalt:$zeile <p>";//Ausgabe
}
Ich weiss aber nie wie lang eine Zeile ist um den Dateizeiger gleich auf die z.b. 3. Zeiele zu setzen, dazu vieleicht hilfe ?
Du brauchst in Deiner Schleife erstens einen Zähler, der sie bei Drei abbricht und zweitens eine Vorkehrung, mit der Zeilen angesammelt werden, die länger als der Lesepuffer sind.
$zeile = "";
while ( (!feof($fp)) && ($n < 3) ) { // solange noch was da und Zeilenzähler n < 3
$zeile .= fgets($fp, 512); // weitere 512 Bytes einlesen und an $zeile anhängen
if ($zeile{strlen($zeile)-1} == "\n") { // Ist das letzte Zeichen der Zeile ein Zeilenvorschub, haben wir eine vollständige Zeile beisammen?
if (++$n < 3) { // Zeilenzähler einen weiterzählen und falls er noch kleiner als Drei ist,...
$zeile = ""; // ... $zeile für nächste Zeile leeren
}
}
}
DANKE!
Werd ich probieren.
lol Marcel