3

重複の可能性:
readdir()のキャッシュ

クリーンなURLがあり、ファイル自体がさまざまなレベルのフォルダーにあるようにサイトを設定しています。それを管理するために、次のスクリプトを使用して、ページのさらに下にインクルードを指示します。

    function listFolderFiles($dir,$exclude){
    global $flist;
    $ffs = scandir($dir); 
    foreach($ffs as $ff)
    { 
        if(is_array($exclude) and !in_array($ff,$exclude))
        { 
            if($ff != '.' && $ff != '..')
            { 
                if(!is_dir($dir.'/'.$ff))
                {       
            }
            if(is_dir($dir.'/'.$ff)) 
                {
                listFolderFiles($dir.'/'.$ff,$exclude);
            } 
            if((is_dir($dir.'/'.$ff)) != 1 && strtolower(substr($ff, strrpos($ff, '.') + 1)) == 'php')
                {
                    $name = basename($ff, ".php");
                    $flist[] .= $name;                  
                }
            }
        } 
    } 
}
listFolderFiles('content/',array('filelist.php')); 
$removing = array('_en','_es');
$pages = str_replace($removing, "", $flist);
unset($dir, $exclude, $flist);
listFolderFiles('content/Beginner/',array('filelist.php')); 
$removing = array('_en','_es');
$beginner = str_replace($removing, "", $flist);
unset($dir, $exclude, $flist);
listFolderFiles('content/Intermediate/',array('filelist.php', $beginner));
$removingi = array('_en','_es');
$intermediate = str_replace($removingi, "", $flist);
unset($dir, $exclude, $flist);
listFolderFiles('content/Advanced/',array('filelist.php', $beginner));
$removinga = array('_en','_es');
$advanced = str_replace($removinga, "", $flist);

現在すべてのページロードで使用されており、新しいファイルを追加するときにのみ更新する必要があるため、このコードを実行するためのより高速な方法はありますか?

4

1 に答える 1

1

アルゴリズムの改善は別として、これはキャッシングの優れた候補です。配列をシリアル化してファイルにドロップするのと同じくらい簡単なようです。次に、有効期限ポリシーを決定できます。擬似コード:

if(!file_exists(CACHE_NAME) || dir_cache_expired(CACHE_NAME)) {
  // ... code to build $dirlist
  file_put_contents(CACHE_NAME, serialize($dirlist));
} else {
  $dirlist = unserialize(file_get_contents(CACHE_NAME));
}

このようにして、キャッシュファイルを削除するだけで、いつでもキャッシュの再構築をトリガーできます。

于 2012-12-13T19:27:11.400 に答える