Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateien auslesen und sortieren

Frage Entwicklung PHP

Mitglied: 17735

17735 (Level 2)

10.06.2007, aktualisiert 11.06.2007, 4375 Aufrufe, 5 Kommentare

Hallo,

auf folgende Weise lese ich mit PHP den Inhalt eines Verzeichnisses aus:

01.
$pfad = "data"
02.
$dirhandle = opendir($pfad); 
03.
 
04.
while($file = readdir($dirhandle)) { 
05.
             
06.
                if($file != "." AND $file != ".." AND $file != ".htaccess") { 
07.
                 
08.
                    $filename = $file
09.
                    $filesize = round(filesize("$pfad/$file") / 1024); 
10.
                     
11.
                    if($filesize == 0) { $filesize = 1; } 
12.
                     
13.
                    echo "<a href=\"$pfad/$filename\">$filename $filesize KB</a>"
14.
                     
15.
16.
                 
17.
18.
 
19.
closedir($dirhandle);
Auf meinem lokalen XAMPP-Testsystem unter Windows klappt das auch wunderbar - wenn ich es beim Dienstleister einsetze, der Debian Linux verwendet, funktioniert das Skript zwar auch, es sortiert die Dateien dann aber nicht alphatetisch, sondern nach dem Änderungsdatum, so dass neu hochgeladene Dateien ganz unten stehen, obwohl sie vom Dateinamen und der alphabetischen Reihenfolge vielleicht viel höher stehen sollten.

Wie kann ich den Inhalt des Verzeichnisses beim Auslesen nach dem Namen ordnen?

Gruß,
Ahnenforscher
Mitglied: Guenni
10.06.2007 um 19:35 Uhr
@17735

Hi,

dann speichere die gefundenen Dateien in ein Array,
und lass dieses sortieren.

01.
$pfad = "."
02.
$dirhandle = opendir($pfad); 
03.
while($file = readdir($dirhandle)) { 
04.
 if($file != "." AND $file != ".." AND $file != ".htaccess")) { 
05.
  $filename = $file
06.
  $filesize = round(filesize("$pfad/$file") / 1024); 
07.
  if($filesize == 0) { $filesize = 1; } 
08.
	// Dateien in ein Array ablegen 
09.
  $file_array[]=array($filename,$filesize); 
10.
11.
12.
closedir($dirhandle); 
13.
// Funktion mit Sortierkriterien, 
14.
// wird von usort benötigt 
15.
function cmp($a, $b) { 
16.
 $index = 0;  // hier kann man den index aendern 
17.
 if ($a[$index] == $b[$index]) return 0; 
18.
 return ($a[$index] > $b[$index])?1:-1; 
19.
20.
// Die Funktion usort bekommt das Array und 
21.
// die zuvor definierte Funktion als Parameter 
22.
usort ($file_array, 'cmp'); 
23.
foreach($file_array as $file){ 
24.
 echo "<a href=\"$pfad/$file[0]\">$file[0]  $file[1] KB</a><br>"
25.
}
Bitte warten ..
Mitglied: 17735
10.06.2007 um 20:09 Uhr
Hallo Günni,

danke für deine Antwort - es funktioniert bei mir aber nicht richtig.

Wenn im Verzeichnis 3 Dateien vorhanden sind, werden auch drei Einträge ausgegeben, allerdings 3 x der gleiche Dateiname und die gleiche Dateigröße.

Woran liegt das?

Gruß,
Ahnenforscher

PS: Die Idee mit dem Array finde ich ansonsten sehr gut.
Bitte warten ..
Mitglied: 17735
10.06.2007 um 20:15 Uhr
Ach mein Fehler ich Schnösel...hab den Index [0] bzw. [1] hinter dem Arraynamen vergessen

Sorry

Meine letzte Frage wäre jetzt noch: Funktioniert das auch ohne die Berücksichtigung von Groß/Kleinschreibung? Unter Linux werden bei dieser Vorgehensweise nämlich zuerst die Dateien, die mit einem Großbuchstaben beginnen sortiert und dann die, die mit einem Kleinbuchstaben beginnen.

Gruß,
Ahnenforscher
Bitte warten ..
Mitglied: Guenni
11.06.2007 um 12:13 Uhr
@17735

Hi,

Meine letzte Frage wäre jetzt noch: Funktioniert das auch ohne die Berücksichtigung von Groß/Kleinschreibung?
Unter Linux werden bei dieser Vorgehensweise nämlich zuerst die Dateien, die mit einem Großbuchstaben beginnen
sortiert und dann die, die mit einem Kleinbuchstaben beginnen.

... ich denke mal, das würde 'ne ziemlich aufwändige Sache, da im Ascii-Code die Großbuchstaben
ja nun mal "kleiner" sind als die Kleinbuchstaben. Ich lege Dateien grundsätzlich in Kleinbuchstaben
an, da stellt sich das Problem erst garnicht.

Ach, und bevor jemand auf die Idee kommt: "Wandel doch alles in Kleinbuchstaben um, wenn
das Array gefüllt wird", also $file_array[]=array(strtolower($filename),$filesize);,
dann wird zwar alles richtig sortiert angezeigt, aber die Links, die du ausgibst, funktionieren
nicht mehr.

Gruß
Günni
Bitte warten ..
Mitglied: 17735
11.06.2007 um 12:51 Uhr
Ach, und bevor jemand auf die Idee kommt:
"Wandel doch alles in Kleinbuchstaben
um, wenn
das Array gefüllt wird", also
$file_array[]=array(strtolower($filename),$filesize);,
dann wird zwar alles richtig sortiert
angezeigt, aber die Links, die du ausgibst,
funktionieren
nicht mehr.

Gruß
Günni

Eben.

Naja, dann werde ich die Dateien nur mit Kleinbuchstaben benennen.

Vielen Dank für deine Hilfe,
Ahnenforscher
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Dateien im Ordner auslesen und umbennen (10)

Frage von jocheng zum Thema Batch & Shell ...

Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel: Einzelne Zeilen einer mehrzeiligen Zelle auslesen (3)

Frage von Booster07 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Zusammenarbeit
Als Administrator im Großraumbüro (30)

Frage von Dopamin85 zum Thema Zusammenarbeit ...

Hardware
Laptop ins Salzwasser gefallen (18)

Frage von Marcel94 zum Thema Hardware ...

Hardware
Lenovo Yoga 500 über angeschlossene USB Tastatur booten (13)

Frage von thomasreischer zum Thema Hardware ...

CPU, RAM, Mainboards
Hardware Fragen (12)

Frage von xaver-2 zum Thema CPU, RAM, Mainboards ...