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, 4385 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 ..
Ähnliche Inhalte
Microsoft Office
gelöst Inhalte vieler excel dateien auslesen und als Liste wiedergeben (13)

Frage von tw3aker zum Thema Microsoft Office ...

Datenbanken
gelöst SQL-Dateien sortieren, kombinieren und filtern (6)

Frage von derapfelsaft zum Thema Datenbanken ...

Batch & Shell
gelöst Auslesen und Vergleichen Zweiter CSV Dateien Powershell (7)

Frage von Hainoon zum Thema Batch & Shell ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Windows Systemdateien
NTFS und die Defragmentierung (26)

Frage von WinLiCLI zum Thema Windows Systemdateien ...

LAN, WAN, Wireless
Zwei Subnetze mit je eigenem Router und Internetzugang verbinden (18)

Frage von hannsgmaulwurf zum Thema LAN, WAN, Wireless ...

Windows Server
WIndows Server 2016 core auf dem Intel NUC NUC5i5RYK i5 5250U (17)

Frage von IxxZett zum Thema Windows Server ...