phpbar.de logo

Mailinglisten-Archive

[php] Nur die nächste Datei im Verzeichnis verlinken - Wie?

[php] Nur die nächste Datei im Verzeichnis verlinken - Wie?

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Don Nov 8 17:00:35 CET 2007


Hallo Kirsten,

Am Donnerstag, 8. November 2007 schrieb Kirsten Bohlig:
> Ich stoße dabei öfter an meine Grenzen, da ich die Sprache nicht
> beherrsche, das Vokabular nicht vorrätig habe.

ich würde einfach einmal das Online-Handbuch durcharbeiten. Von vrne bis 
hinten. Bevor jetzt irgendein Verdacht aufkommt: Das meine ich wirklich 
ernst. :-) Das PHP-Handbuch ist in der Regel sehr verständlich 
geschrieben und mit sehr eingängigen Beispielen ausgestattet, die 
gängige Programmieraufgaben lösen. Spätestens in den User Contributed 
Notes findest Du auch Hilfe für anspruchsvollere Aufgaben. Also 
verschaffe Dir einfach mal einen Überblick. Das Herumstochern im Nebel 
ist nicht sinnvoll. :-)

> Also:
> Mit folgendem Code lese ich die Dateien aus einem Verzeichnis aus,
> filtere die php-Dateien aus und verlinke sie mit ihren jeweiligen
> h1-Überschriften als Linktext.
>
> $dir = "OrdnerXY"; // Verzeichnisname
> $verzeichnis = openDir($dir);
> while ($file = readDir($verzeichnis))
> {
>   	if($file != substr_count($file,".php"))
> 		{
> 		  $datei = fOpen($dir . "/" . $file, "r");
> 		  $inhalt = fRead($datei, 1000);
> 		  fClose($datei);
> 		  ereg("<h1>(.*)<\/h1>" , $inhalt , $extract);
> 		  $content .= "<a href=\"".$dir."/" .$file . "\">$extract[1]</a>";
> 		}
> }
> closeDir($verzeichnis);
>
> Ich bekomme es auch hin, mir nur die "neueste Datei" verlinkt
> anzeigen zu lassen, das Verzeichnis rauf und runter zu sortieren usw.
>
> Mein Problem:
> Ruft man eine dieser Dateien aus der Liste auf, kommt man auf eine
> "Folgeseite".
> Jetzt hätte ich gerne, dass auf dieser "zweiten" Seite nur *ein* Link
> angezeigt wird, nämlich der auf die Datei, die als nächstes im
> Verzeichnis aufgelistet ist, ein eigentlich doch schlichter
> "Weiter"-Link also.
>
> Wie erreicht man dieses Ziel ohne Datenbankanbindung?

Du kommst oben ohne Datenbankanbindung aus, also läßt sich die Aufgabe 
auch insgesamt ohne Datenbank lösen. Im Kern mußt Du immer nur wissen, 
welche Einträge die Verzeichnisliste hat und wo Du aktuell in der 
Verzeichnisliste stehst.

> Läßt sich ein solcher Teil in das obige Skript einbauen (wenn ja,
> wie?!) oder ist das ein vollkommen neues?
> Das müsste doch gehen und dürfte eigentlich gar nicht so schwer sein,
> oder doch?

Es gibt verschiedene Ansätze.

Eine Möglichkeit ist, einfach wie oben auf jeder Seite das Verzeichnis 
auszulesen. Oder Du liest das Verzeichnis auf der ersten Seite einmal 
aus und speicherst Dir das Ergebnis in einem Cookie, in einer Session 
oder einfach in einer Textdatei auf dem Server. Je nach Datenmenge 
kommt die eine oder andere Lösung nicht in Betracht, z.B. die mit dem 
Cookie. Anschließend brauchst Du auf den folgenden Seiten nur auf die 
gespeicherten Daten zuzugreifen. Bei einem solchen Cache-Mechanismus 
mußt Du allerdings bedenken, daß eventuell zwischenzeitlich eine Datei 
im Verzeichnis hinzugekommen sein könnte, die in dem Cache dann nicht 
vorhanden ist. Das muß aber nicht von Nachteil sein. Es kommt nur 
darauf an, was man will bzw. braucht.

Dann mußt Du noch ermitteln bzw. Dir merken, wo Du in der Liste stehst. 
Diese Angabe kannst Du z.B. mit dem Link über GET weitergeben oder 
ebenfalls in einem Cookie oder der Session speichern und auf der 
nächsten Seite wieder auslesen.


Viele Grüße,
Lutz

php::bar PHP Wiki   -   Listenarchive