0

ディレクトリの内容を読み取る関数があります。それを呼び出しましょう/dir/css/
このディレクトリには、ファイル名がわからないファイルがいくつかあります。これはランダムである可能性があります。

[0] filename.css
[1] filename_mobile.css
[2] otherfile.css
[3] otherfile_mobile.css
[4] generalfile.css
[5] otherGeneralfile.css

IS_MOBILE_USER値として true/false を持つ定数を定義しました。

IS_MOBILE_USER===trueモバイル サフィックスが付いたファイル、またはモバイル バリアントが存在しないファイルが必要な場合。

filename_mobile.css    <- take mobile variant instead of filename.css
otherfile_mobile.css   <- take mobile variant instead of otherfile.css
generalfile.css      <- take this, no _mobile variant present
otherGeneralfile.css <- take this, no _mobile variant present

私を正しい方向に押し進めることができる人はいますか? コードで記述する必要はありませんが、一連のコードを探しています (ただし、コードは完全に受け入れられます:P)

編集:パフォーマンスは重要です。それ以外の場合は、配列を数回ループしてすべてが一致することを確認する関数を作成します。しかし、配列は遅いです:)


これが私が今いる場所です。これにより、_mobileファイルのないすべての配列が得られます。_mobileここで、可能であれば、再度ループすることなく、バリアントを提供するコードを追加したいと考えています。

define('IS_MOBILE_USER', true); // true now, I use this to test, could be false
function scandir4resource($loc, $ext){
    $files = array();
    $dir = opendir($_SERVER['DOCUMENT_ROOT'].$loc);
    while(($currentFile = readdir($dir)) !== false){
        // . and .. not needed
        if ( $currentFile == '.' || $currentFile == '..' ){
            continue;
        }
        // Dont open backup files
        elseif( strpos($currentFile, 'bak')!==false){
            continue;
        }
        // If not mobile, and mobile file -> skip
        elseif( !IS_MOBILE_USER && strpos($currentFile, '_mobile')!==false){
            continue;
        }
        // if mobile, current file doesnt have '_mobile' but one does exist->skip
        elseif( IS_MOBILE_USER && strpos($currentFile, '_mobile')===false 
                && file_exists($_SERVER['DOCUMENT_ROOT'].$loc.str_replace(".".$ext, "_mobile.".$ext, $currentFile)) ){
            continue;
        }
        // If survived the checks, add to array:
        $files[] = $currentFile;
    }
    closedir($dir);
    return $files;
}

これは小さなベンチマークです。この関数への 10.000 回の呼び出しには 1.2 ~ 1.5 秒かかり、再度ループするとかなりの時間がかかります。

for($i=0; $i<=10000; $i++){
    $files = scandir4resource($_SERVER['DOCUMENT_ROOT']."UserFiles/troep/");
}

最後に、これは結果です:「1.8013050556183秒かかりました」とその値の周りにis_fileとどまりfile_existsます

4

1 に答える 1