Dateien aus Unterverzeichnis ausgeben mit Link

Muckel1986

Erfahrenes Mitglied
Hallo zusammen,

habe auf meinem Webspace ein Verzeichnis mit ein paar selbst erstellten PDF-Dokumenten. Da jene von Zeit zu Zeit erneuert werden, möchte ich ein kleines Script nehmen, welches die Dateien in einer einfachen Liste (ul) ausgibt.

Die Frage ist nun, wie ich die Dateien in dem Unterverzeichnis auflisten kann?

Gefunden habe ich "Klasse um Verzeichnisse zu listen", doch ich brauche keine weiteren Verzeichnisse, sondern nur die Datei(en) von einem bereits bekannten Unterverzeichnis.

Über die Suchmaschiene habe ich folgendes Script gefunden:
PHP:
<?php
$handle = opendir ("./dateien/");

if ($handle)  {
	while ($file = readdir($handle))  {
		if (($file != ".") && ($file != ".."))  {
			$filelist[] = $file;
		}
	}
	closedir ($handle);
}
// Ausgabe der Dateien
 print_r($filelist); 

if($file != '.' && $file != '..') {
	printf('<a href="%s">%s</a>', $file, $file);
}
?>
Damit erhalte ich diese Ausgabe:
Code:
Array ( [0] => 2011-05-01-Krankenakte-von-Tobias-Mueller-05-07-1986.pdf [1] => 2011-05-01-Krankenakte-Tobias-Mueller-Ergaenzende-Informationen.pdf )
Doch leider sehe ich gerade nicht die Möglichkeit, wie ich das verändern kann. Denn mein Versuch mit echo $file auszugeben, hatte keinen Erfolg.

Bei einem anderen Script bekomme ich die Rückmeldung
Code:
Resource id #1 konnte nicht gefunden werden
die sich auf diese Codezeilen beziehen:
PHP:
<?php
$verzeichnis = opendir ("/dateien/");
$ausnahme = "index.htm";

$ausgabe = @opendir($verzeichnis) or die("$verzeichnis konnte nicht gefunden werden");

while ($dateien = readdir($ausgabe)) {
	
	if(($dateien!=".") and ($dateien!="..") and ($dateien!=$ausnahme )) {
		
		echo "<a href=\"$dateien\">$dateien</a><br>";
	}
}

closedir($ausgabe);

?>
Hoffe ihr könnt mir helfen!

Lieben Gruß
Tobias
 
Du hast ein Array mit den Dateinamen. Das ist gut. Nun musst du nur jeden Wert des Arrays ausgeben

PHP:
// Ausgabe der Dateien
print_r($filelist); 

foreach($filelist as $file){
    if($file != '.' && $file != '..') {
        printf('<a href="%s">%s</a>', $file, $file);
    }
}
 
Hallo zusammen,

von Arrays habe ich leider noch keine Ahnung. Habe aber aus dem, was ich so gefunden habe, was zusammen geschustert:
PHP:
<ul>
<?php
date_default_timezone_set('Europe/Berlin'); /* notwendig ab PHP 5.3, sonst Warnung */
$url = "http://deine-domain.de/gesundheit";
$unterverzeichnis = "dateien";

$verzeichnisname = "/direkter-Pfad/";

$verzeichnis = opendir($verzeichnisname);

while($eintrag = readdir ($verzeichnis)) {

	// ausschluss von Verzeichnis
	$aus = $verzeichnisname . "/" . $eintrag;
		
		if(is_dir($aus)) { }
	// Ausgabe der Dateien
	else { 

		echo "<li><a href=\"$url/$unterverzeichnis/$eintrag\">$eintrag</a><br />Dateigr&ouml;&szlig;e: " . filesize($aus) . "Byte<br />Zeitstempel: " . strftime("%d.%m.%Y, %H:%M", filemtime($aus)) . "<br />Link: <a href=\"$url/$unterverzeichnis/$eintrag\">$url/$unterverzeichnis/$eintrag</a></li>";
	}
}

closedir($verzeichnis);
?>
</ul>
Nun gibt es aber noch ein Problem. Und zwar musste ich meine Krankenakte in einzelne PDFs splitten, da die Zusammengefügte zu groß ist. Also habe ich die einzelnen Dateien in ein Unterverzeichnis geladen und lasse dieses nun ausgeben. Dazu gehört aber eine selbsterstellte PDF Datei. Jene habe ich aktuell per Hand eingebunden, da ich eine Liste mit zwei Ebenen haben möchte.

Denke ich muss mir nun doch das Tutorial anschauen, welches es hier gibt.

Denn Ziel ist nun, dass man diese Ausgabe hat:
  • 2011-06-01-Ergaenzende-Infos
  • 2011-06-01-Krankenakte
    • 2011-06-01-Krankenakte-Datei-01
    • 2011-06-01-Krankenakte-Datei-02
  • 2011-05-01-Ergaenzende-Infos
  • 2011-05-01-Krankenakte
    • 2011-05-01-Krankenakte-Datei-01
    • 2011-05-01-Krankenakte-Datei-02
  • x
Es müsste also auch die eine PDF im Verzeichnis darüber aufgeführt werden und dann die einzelnen PDFs. Würde man das so ändern können, bräuchte ich nur noch die Dateien hochladen.

Als (Not-) Lösung geht es auch so:
PHP:
<ul>
	<li><a href="http://tobias-leben.de/gesundheit/dateien/2011-05-01-Krankenakte-Tobias-Mueller-Ergaenzende-Informationen.pdf" target="_self">2011-05-01-Krankenakte-Tobias-Mueller-Ergaenzende-Informationen.pdf</a></li>
	<li>2011-05-01-Krankenakte-von-Tobias-Mueller-05-07-1986<ul>
<?php
date_default_timezone_set('Europe/Zurich'); /* notwendig ab PHP 5.3, sonst Warnung */
$url = "http://deine-domain.de/gesundheit/dateien";
$unterverzeichnis = "PDFs";

$verzeichnisname = "/direkter-Pfad/";

$verzeichnis = opendir($verzeichnisname);

while($eintrag = readdir ($verzeichnis)) {

	// ausschluss von Verzeichnis
	$aus = $verzeichnisname . "/" . $eintrag;
		
		if(is_dir($aus)) { }
	// Ausgabe der Dateien
	else {
		echo "<li><a href=\"$url/$unterverzeichnis/$eintrag\">$eintrag</a></li>";
/*
echo "<li><a href=\"$url/$unterverzeichnis/$eintrag\">$eintrag</a><br />Dateigr&ouml;&szlig;e: " . filesize($aus) . "Byte<br />Zeitstempel: " . strftime("%d.%m.%Y, %H:%M", filemtime($aus)) . "<br />Link: <a href=\"$url/$unterverzeichnis/$eintrag\">$url/$unterverzeichnis/$eintrag</a></li>";
*/
	}
}

closedir($verzeichnis);
?>
</ul></li>
</ul>

Gruß Tobias
 
Hallo nochmal,

es gibt bei dem Script noch ein größeres Problem. Und zwar musste ich ein paar Dateien später hochladen. Nun werden sie nach den anderen Dateien angzeigt. Offensichtlich muss eine Sortierung nach dem Zeitpunkt des Hochladens erfolgen. Dies würde ich gerne ändern und die Sortierung nach dem Dateinamen vornehmen, damit nicht dieses passiert:
Code:
2010-08-03-Stille-S4v4-Labor.pdf
2010-09-01-MHH-Kontrolle-S1v4.pdf
2010-09-01-MHH-Kontrolle-S2v4.pdf
2010-09-01-MHH-Kontrolle-S3v4-Echo1.pdf
2010-09-01-MHH-Kontrolle-S4v4-Echo2.pdf
2007-07-25-DKD-S1v8.pdf
2007-07-25-DKD-S2v8.pdf
2007-07-25-DKD-S3v8.pdf
Hoffe ihr könnt mir dabei helfen!

Lieben Gruß Tobias
 
Hi,

wenn du die Dateien mit readdir() ausliest, dann sind diese nicht sortiert und kommen direkt vom Dateisystem.
Folge dem Vorschlag von Yaslaw und speichere dir alle Dateinamen in einem Array. Danach über die sort() sortieren lassen und ausgeben.

Gruß
BK
 
Zurück