0
function printAll($dirName)
{
    if (empty($leid)) { $leid = "1"; }
    $root = $_SERVER['DOCUMENT_ROOT'];
    $site = $_GET['site'];
    $user = $_GET['user'];
    $tag = "";
    $dirs=array($dirName);
    $files=array();
    while($dir=array_pop($dirs)){
        $handle=opendir($dir);
        while($file=readdir($handle)){
            if($file!='.' && $file!='..'){
                $dest=$dir.'/'.$file;
                $userid = str_replace("$root/", "", $dir);
                $userid = str_replace("dl/$site","",$userid);
                $userid = str_replace("/","",$userid);
                if(is_file($dest)){
                    $files[]=$file;

                    $titrepost = htmlspecialchars($file);

                    $downloadlink = "$dest";
                    $downloadlink = str_replace("$root/", "", $downloadlink);

                    $za = new ZipArchive();
                    $za->open($downloadlink);

                    $leid = $leid + 1;
                    echo "<br>
                    <b>File = $file</b><br>
                    Userid = $userid
                    <br>";
                    for( $i = 0; $i < $za->numFiles; $i++ ){
                        $stat = $za->statIndex( $i );
                        $toune = basename( $stat['name'] );
                        echo "$toune <br>";
                    }

                } else {
                    $dirs[]=$dest;
                }
            }
        }
    }
    return $files;
}


$site = $_GET['site'];
$currentdir = getcwd();
$source = "$currentdir/dl/$site";
if (!empty($user)) {
    $source = "$currentdir/dl/$site/$user";
}
printAll($source);

このスクリプトは、ZIP アーカイブ内のすべてのファイルを一覧表示し、各ファイルの名前をエコーし​​ます。

今、ファイル名 ($toune) をアルファベット順にソートする方法を理解するのに苦労しています

これが私が試したことです:

for( $i = 0; $i < $za->numFiles; $i++ ){
    $stat = $za->statIndex( $i );
    $toune_arr[] = basename( $stat['name'] );        
}
asort($toune_arr);
print_r($toune_arr);

ただし、このコードでは機能しません。$toune_arr は、各 zip ファイルがリストされた後に空にならないため、スクリプトがファイルリストを出力するたびに、以前の zip アーカイブのファイルが含まれます。

4

1 に答える 1

0

関数の最初で配列をリセットするだけです。

function printAll($dirName)
{
    $toune_arr = array();
    ...
于 2013-08-17T15:54:58.787 に答える