PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : angezeigter Link zu ausgelesenen Dateien


robbytobby
01.11.2005, 22:29:47
Hallo, dank des Forums habe ich es mit meinen ziemlich rudimentären PHP-Kenntnissen bereits soweit gebracht, dass ich eine Liste aller in einem bestimmten Ordner enthaltenen Dateien auf einer Seite ausgeben kann.

Ich verwende dazu folgendes Script:
<?
$dir = "ergebnisse";
$verzeichnis = dir($dir);
while($datei = $verzeichnis->read()){

echo "<a href='$dir/$datei'>$datei</a><br>";
}
$verzeichnis->close();
?>
Zwei Dinge würde ich nun gerne noch verbessern, zu denen ich im Forum nichts finden konnte:

Problem 1: Die Dateien liegen im Format 2005-11-01.pdf in dem auszulesenden Verzeichnis. Wie kann ich dafür sorgen, dass dies im Link als "01. November 2005" oder noch besser "xx. Kalenderwoche" (da es sich um eine Zusammenfassung der ganzen Woche handelt und das Datum des Dateinamens immer der abschließende Sonntag der Woche ist) dargestellt wird?

Problem 2: Pro Zeile erscheint je ein Link zu einer Datei. In den ersten 3 Zeilen steht jedoch

.
..
_vti_cnf

und erst dann geht es mit der Auflistung der Dateien los. Wie kann ich das verhindern?

xabbuh
01.11.2005, 22:39:02
Problem 1: Die Dateien liegen im Format 2005-11-01.pdf in dem auszulesenden Verzeichnis. Wie kann ich dafür sorgen, dass dies im Link als "01. November 2005" oder noch besser "xx. Kalenderwoche" (da es sich um eine Zusammenfassung der ganzen Woche handelt und das Datum des Dateinamens immer der abschließende Sonntag der Woche ist) dargestellt wird?
Dazu filterst du am besten zuerst das Datum mit substr() (http://www.php.net/substr) aus dem Dateinamen und wandelst es mit strtotime() (http://www.php.net/strtotime) in einen UNIX-Timestamp um, den du dann mit strftime() (http://www.php.net/strftime) bzw. date() (http://www.php.net/date) formatieren kannst.

Problem 2: Pro Zeile erscheint je ein Link zu einer Datei. In den ersten 3 Zeilen steht jedoch

.
..
_vti_cnf
Handelt es sich bei diesen Links um Verweise auf Verzeichnisse statt Dateien? Dann überprüfe vorher einfach mit is_dir() (http://www.php.net/is_dir) oder is_file() (http://www.php.net/is_file), ob das aktuelle Element ein Verzeichnis oder eine Datei ist.

meikel (†)
02.11.2005, 01:36:59
Problem 1: Die Dateien liegen im Format 2005-11-01.pdf in dem auszulesenden Verzeichnis. Wie kann ich dafür sorgen, dass dies im Link als "01. November 2005" oder noch besser "xx. Kalenderwoche" (da es sich um eine Zusammenfassung der ganzen Woche handelt und das Datum des Dateinamens immer der abschließende Sonntag der Woche ist) dargestellt wird?
Mit pathinfo() den Namen rausfischen und weiter, wie xabbuh beschrieben hatte.

EDIT:
Eben erst gemerkt: mit pathinfo() kann man zwar den Pfad und die Extension ermitteln, aber leider nicht (wie ich dummerweise behauptet hatte) den Namen OHNE die Extension.
Problem 2:
.
..
_vti_cnf

und erst dann geht es mit der Auflistung der Dateien los. Wie kann ich das verhindern?
Mit if und continue
<?
$dir = "ergebnisse";
$verzeichnis = dir('./' . $dir);
while(false !== ($datei = $verzeichnis->read()) )
{
if ($datei == '.' OR $datei == '..' OR $datei == '_vti_cnf')
continue;

# EDIT ######
$name = substr($datei, 0, strrpos($datei, '.'));
$woche = strftime('%U', strtotime($name)) - 1; # in PHP beginnt die Woche mit Sonntag
#############

printf('<a href="%s/%s">%s. Kalenderwoche</a><br>',
$dir,
$datei,
$woche);
}
$verzeichnis->close();
?>

robbytobby
02.11.2005, 02:56:29
Vielen Dank euch beiden schonmal bis dahin! Mit dem zuletzt geposteten Code sind die Punkte und das vti_cnf am Anfang schon mal verschwunden, allerdings sieht jeder Link zu einem Dokument so aus: -1. Kalenderwoche. Irgendeine Kleinigkeit stimmt also noch nicht und ich find nicht raus was es ist... :(

meikel (†)
02.11.2005, 06:32:19
... allerdings sieht jeder Link zu einem Dokument so aus: -1. Kalenderwoche. Irgendeine Kleinigkeit stimmt also noch nicht und ich find nicht raus was es ist... :(
Die "Kleinigkeit" war mein Fehler. Beachte bitte mein Edit.

robbytobby
02.11.2005, 14:13:03
Prima Hilfe soweit, vielen Dank! Nun würde ich die Reihenfolge der ausgegeben Links zum krönenden Abschluss gerne noch umkehren, so dass das jüngste Datum ganz oben steht, nicht das älteste. Ich habe es mit ORDER BY enddatum DESC versuchen wollen, aber es handelt sich ja nicht um eine Datenbankabfrage... Mit welchem Code könnte ich die Reihenfolge denn nun doch vertauschen?

meikel (†)
02.11.2005, 15:21:00
http://de3.php.net/rsort - Diese Funktion sortiert ein Array in umgekehrter Reihenfolge (vom höchsten zum niedrigsten Wert).

robbytobby
02.11.2005, 15:44:40
Hm also irgendwie muss das Script doch noch fehlerhaft sein. Ich habe es zwar noch ein klein wenig verändert, aber nur in der Ausgabe des erstellten Links. Die Sortierung enthält jedoch einige Fehler. Folgendes Script kommt zum Einsatz:

<?
setlocale(LC_TIME, 'de_DE');
$dir = "ergebnisse2005";
$verzeichnis = dir('./' . $dir);
while(false !== ($datei = $verzeichnis->read()) )
{
if ($datei == '.' OR $datei == '..' OR $datei == '_vti_cnf')
continue;
$name = substr($datei, 0, strrpos($datei, '.'));
$enddatum = strftime('%d.%m.%G', strtotime($name));

printf('<a href="%s/%s" target="_blank">Paarergebnisse am Wochenende vom %s</a>&nbsp;&nbsp;<img src="images/design/acr.gif"><br>&nbsp;<br>',
$dir,
$datei,
$enddatum);
}
$verzeichnis->close();
?>

Das Ergebnis ist folgendes: http://www.tc-blaugold.de/paarergebnisse2.php
Der 15.01.2005 steht vor dem 08.01.2005. Der Rest stimmt. Wählt man oben das Jahr 2004 aus, findet man noch viel mehr Fehler, obwohl das Script identisch ist, es wird nur ein anderes Verzeichnis ausgelesen. Was mag da wieder falsch sein?

meikel (†)
02.11.2005, 15:55:26
Hm also irgendwie muss das Script doch noch fehlerhaft sein.
Naja, wenn Du die Ausgabe sortiert haben möchtest, mußt Du mit 2 Schleifen arbeiten.
1. leeres Array erzeugen
2. Schleife: Verzeichnis in das Array lesen
3. Array sortieren
4. Schleife: sortiertes Array per Print ausgeben

robbytobby
02.11.2005, 16:17:44
hm...dafür brauch ich zeit... :/