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, 4374 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
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

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

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...