ディレクトリの内容を読み取る関数があります。それを呼び出しましょう/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
ます