次のコードを使用して、ディレクトリ内の画像のリストを取得しています。
$files = scandir($imagepath);
だが $files
には隠しファイルも含まれます。それらを除外するにはどうすればよいですか?
Unixでは、 preg_grep
ドットで始まるファイル名を除外するには:
$files = preg_grep('/^([^.])/', scandir($imagepath));
私は、ドットファイルを無視する簡単な方法を提供するこのようなものにDirectoryIteratorを使用する傾向があります。
$path = '/your/path';
foreach (new DirectoryIterator($path) as $fileInfo) {
if($fileInfo->isDot()) continue;
$file = $path.$fileInfo->getFilename();
}
function nothidden($path) {
$files = scandir($path);
foreach($files as $file) {
if ($file[0] != '.') $nothidden[] = $file;
return $nothidden;
}
}
この機能を使用するだけです
$files = nothidden($imagepath);
$files = array_diff(scandir($imagepath), array('..', '.'));
または
$files = array_slice(scandir($imagepath), 2);
より速いかもしれません
$files = preg_grep('/^([^.])/', scandir($imagepath));
あなたは隠しファイルを「フィルタリング」しようとしているので、それはより理にかなっており、これを行うのが最適だと思います...
$items = array_filter(scandir($directory), function ($item) {
return 0 !== strpos($item, '.');
});
また、変数$files
を呼び出すことはありません。変数がファイルのみを含むことを意味しますが、実際にはディレクトリを取得することもできます...場合によっては:)
Windowsシステム専用のphp.netからのコメントに遭遇しました: http://php.net/manual/en/function.filetype.php#87161
アーカイブのためにここで引用:
WindowsバージョンではCLIバージョンPHPを使用します。NTFSによってファイルが「非表示」とマークされているかどうかを確認する方法は次のとおりです。
_function is_hidden_file($fn) { $attr = trim(exec('FOR %A IN ("'.$fn.'") DO @ECHO %~aA')); if($attr[3] === 'h') return true; return false; }
_
if($attr[3] === 'h')
をif($attr[4] === 's')
に変更すると、システムファイルがチェックされます。これは、DOSシェルコマンドを提供するWindows OSで動作するはずです。
preg_grepを使用して、たとえば.
$dir = "images/";
$files = preg_grep('/^([^.])/', scandir($dir));
隠しファイルが.
で始まると仮定すると、出力時に次のようなことができます:
foreach($files as $file) {
if(strpos($file, '.') !== (int) 0) {
echo $file;
}
}
ここで、最初の文字として.
が存在しない場合はすべてのアイテムをチェックし、そうでない場合は希望どおりにエコーします。
配列インデックスもリセットして順序を設定する場合は、次のコードを使用します。
$path = "the/path";
$files = array_values(
preg_grep(
'/^([^.])/',
scandir($path, SCANDIR_SORT_ASCENDING)
));
1行:
$path = "daten/kundenimporte/";
$files = array_values(preg_grep('/^([^.])/', scandir($path, SCANDIR_SORT_ASCENDING)));