PHP Alphabetische Sortierung

HO!

assimiliert
Hallo,

ich habe eine Webseite, auf der ich Dateien hochlade (in Ordnern) und zum Download bereitstelle. Nun ist es so, dass diese Dateien im Ordner nicht alphabetisch dargestellt werden, sondern augenscheinlich kreuz und quer, wohingegen sie im FTP-Client alphabetisch sind.

Der Quellcode der Startseite lautet:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">


<head>
<title>studetenmaterial</title>

<meta http-equiv="Content-Type" content="text/css; charset=ISO-8859-1" />
<meta http-equiv="imagetoolbar" content="no" />
<meta name="description" content="vertraulich" />
<meta name="author" content="Eismann" />
<meta name="copyright" content="Studium-Info" />
<meta name="robots" content="noindex,nofollow,archiv" />

</head>
<body>


<div style="margin-top:5px;border:1px solid #FF0000; background:#eeeeee">
<h2 align="center">Klausurensammlung der Studiengruppen der NoA Hamburg</h1>
</div>

<div style="padding:10px 5px 10px 5px;margin-top:5px; border:1px solid #FF0000; background:#eeeeee">

<?php
$prefs = array(
'rootDName' => 'Klausuren',
'ind' => '    ',
'showURHere'=> 1,
'dbStyle_1' => '<div style="font-size:bigger;font-weight:bold">',
'dbStyle_2' => '</div><hr noshade size="1">',
'dbSep' => ' <b>></b> ',
'firstLstyle_1' => '<span style="color:red;">',
'firstLstyle_2' => '</span>',
'subLstyle_1' => '<span style="color:magenta;">',
'subLstyle_2' => '</span>',
'showDirLevels' => '0',
'skipDirPrefix' => '_',
'neverShowSkipD' => 0,
'firstLSeparator' => '',
'showDAsLnk' => 1,
'showFAsLnk' => 1,
'showFiles' => 1,
'showFsize' => 1,
'showAllFiles' => 0,
'sfOnlyCurDir' => 0,
'hideScript'=> 1,
'fType' => array('mp3','jpg','doc','docx','zip','zipx','txt','inc','php','htm','pdf','gif','rar','tar.gz'),
'fPics' => array(6,2,3,3,8,8,3,3,3,7,4,2,8,8),
'showPics' => 1,
'pics'=> array('1x1.gif','folder.gif','pic.jpg','text.jpg','pdf.jpg','ie.gif','mp3.gif','ns.gif','rar.jpg'),
'picPath' => '_icons/',
'noFiles' => '<ul><i>keine Dateien im Verzeichnis</i></ul>',
'errMess' => 'Invalid Path!',
'onlyDList' => 0,
'dirList' => array('sampleDir/_pics','sampleDir/sample2','sampleDir'));

// do not change anything below
$prefs['rootD'] = './';
$la = '<a href="';
$le = '</a>';
if(!isset($_GET['p'])&&$prefs['onlyDList']!=1){$path=$prefs['rootD'];$r=1;}
elseif(!isset($_GET['p'])&&$prefs['onlyDList']==1){die($prefs['errMess']);}
elseif(isset($_GET['p'])){if(is_numeric($_GET['p'])){$path = $prefs['dirList'][$_GET['p']];}
elseif($prefs['onlyDList']!=1){if(ereg("^\.{1,2}",$_GET['p']) || ereg("^\/",$_GET['p']) || ereg(":",$_GET['p'])){ die($prefs['errMess']);}
else{$path = $_GET['p'];}}else{die($prefs['errMess']);}}
if($prefs['neverShowSkipD']==1){$path = ereg_replace($prefs['skipDirPrefix'],' ', $path);}

if($prefs['showURHere']==1){
if(isset($r)){echo $prefs['dbStyle_1'].$prefs['rootDName'].$prefs['dbStyle_2']."\n";}
else{echo $prefs['dbStyle_1'].$la.$_SERVER['PHP_SELF'].'">'.$prefs['rootDName'].$le."\n";
$urhere = explode('/',$path); $f = '';
while(list($key, $val) = each($urhere)) {if($key>0){$s = '/';} else{$s = '';} $f .= $s.$val;
echo $prefs['dbSep'].$la.$_SERVER['PHP_SELF'].'?p='.$f.'">'.$val.$le."\n";}
echo $prefs['dbStyle_2']."\n";}}

function read_dir($path,$num){
    global $prefs,$la,$le;
    $name = 'pathhandle'.$num;
    $dirlist = array();
    $filelist = array();
    $cnt = 0;
    if ($$name = @opendir("$path")) {
        $l_1 = '';
        while (($file = readdir($$name)) !== false){
            $cur_file = $path.'/'.$file;
          if(is_dir($cur_file) AND $file <> '.' AND $file <> '..' AND $file[0]<> $prefs['skipDirPrefix']){
                if($num>0 || $path <> $prefs['rootD']){$cur_file = $path.'/'.$file;}
                else{$cur_file = $file;}
                  array_push($dirlist,$cur_file);}
            elseif($prefs['showFiles'] == 1 AND is_file($cur_file)){
                            $cur_file = ereg_replace('//','/', $cur_file);
            if($file == basename($_SERVER['PHP_SELF']) && $prefs['hideScript']==1){continue;}
                    if($prefs['showFAsLnk'] == 1){
                    $l_1 = $la.$cur_file.'">';}
                if($prefs['showFsize']==1){ if(!$fs = ' <span style="font-size:smaller;">('.(number_format((filesize($cur_file)/1024), 2, ',', '.')).') KB</span>'){$fs ='--';}}

                if($prefs['showAllFiles'] == 1){
                    array_push($filelist, $l_1.basename($cur_file).$le.$fs);
                }
                else{
                    $i = 0;
                    $pic = '';
                    foreach($prefs['fType'] as $ftype){
                        if(eregi("$ftype$", $file)){
                            if($prefs['showPics'] == 1){
                                $pic = '<img src="'.$prefs['picPath'].$prefs['pics'][$prefs['fPics'][$i]].'" align="absmiddle" hspace="3">';}
                            array_push($filelist, $pic.$l_1.basename($cur_file).$le.$fs);
                            continue 2;
                        }
                    $i++;
                    }
                }
            }
        }
        foreach($dirlist as $dir){
            $ind = ''; $l_1='';
            if($prefs['showDAsLnk'] == 1){
                   if(isset($num)){
                    $l_1 = $la.$_SERVER['PHP_SELF'].'?p='.$dir.'">';}
                    else{ $l_1 = $la.$dir.'">';}
                    }
            for($i=0;$i<$num;$i++){ $ind = $ind.$prefs['ind'];}
            if($num==0){
                $s_1 = $prefs['firstLstyle_1'];
                $s_2 = $prefs['firstLstyle_2'];}
            if($num>0){
                $s_1 = $prefs['subLstyle_1'];
                $s_2 = $prefs['subLstyle_2'];}
            if($prefs['showPics'] == 1){
                $pic = '<img src="'.$prefs['picPath'].$prefs['pics'][1].'" align="absmiddle" hspace="3">';}
            echo $ind.$pic.$l_1.$s_1.basename($dir).$s_2.$le.'<br>'."\n";
            if((is_numeric($prefs['showDirLevels']) && $num<$prefs['showDirLevels']) || $prefs['showDirLevels'] == 'all'){
            $num++;
            read_dir($dir,$num);
            $num--;}
            if($num == 0){ echo $prefs['firstLSeparator'];}
        }
        if(($prefs['sfOnlyCurDir'] == 1 && $num == 0) || $prefs['sfOnlyCurDir'] == 0){
            if($num == 0 && count($filelist)==0){echo $prefs['noFiles'];}
            else{
                foreach($filelist as $f){
                $ind = '';
                for($i=0;$i<$num;$i++){ $ind = $ind.$prefs['ind'];}
                echo $ind.$f.'<br>'."\n";
                }
            }
        }
    }
    else{ echo $prefs['errMess'].'<br>';}
}
read_dir($path,0);
?>

</div>

<div style="padding:5px 3px 0px 3px;margin-top:5px;border:1px solid #FF0000; background:#eeeeee">

<p>Bei Problemen oder Anregungen schick bitte eine kurze <a href="mailto:info@blablka.de">Mail</a>.<br>

<h6 align="right">Copyright </h6>
</div>
</body>
</html>

Wo muss da nun dieses array_multisort() oderwas auch immer hin? :) Kann mir jemand helfen?
 
Ich tu mich immer ein wenig schwer damit, fremden Quellcode gedanklich umzusetzen.
Aber wenn ich das richtig interpretiere hast Du ja Deine Dateiliste bereits in einem Array stehen.

$filelist ist Dein Array - richtig?

Die Funktion rsort Sortiert absteigend nach den Werten und sort aufsteigend.
In deinem Fall z.B. sort($filelist);

Das muss dann auf alle Fälle, vor dem Ausgeben des Arrays platziert werden.
Also vor
foreach($filelist as $f)

Ich hoffe, ich konnte ein wenig helfen.
 
Das hat super geklappt, danke Astro!

Es werden allerdings nur die Dateien sortiert (PDF), die Ordner, die in ein weiteres Verzeichnis weisen, sind weiterhin durcheinander – hast Du da eine Idee? :) Zurzeit werden alle Dateien gebündelt alphabetisch angezeigt und darunter/darüber die Ordner, aber nicht alphabetisch :)
 
Du meinst etwa so?

Ordner1
...datei1
...datei2
Ordner2
...datei3
...datei4

Da würde ich etvl. Ordnerweise auslesen.

Ordner1 öffnen, dateien in ein array schreiben, sortieren, ausgeben.
usw.

Müsste mal in meinen Scripten nachschauen, wie ich das gelöst habe.
 
Oben