使用中に拡張子がjpeg
、png
、gif
などの画像のみを取得する方法はありますか
$dir = '/tmp';
$files1 = scandir($dir);
glob
を使用できます
$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);
大文字と小文字を区別しない場合は、DirectoryIterator
をRegexIterator
またはパスと組み合わせて使用できます。 scandir
をarray_map
に変換し、不要な拡張子をフィルタリングするコールバックを使用します。 strpos
、fnmatch
、またはpathinfo
のいずれを使用して拡張機能を取得するかはユーザー次第です。
実際の質問はscandirを使用しており、回答は最終的にglobになります。ブロブがかなり重い場合は両方に大きな違いがあります。次のコードを使用して、scandirで同じフィルタリングを実行できます。
$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));
これが誰かの助けになることを願っています。
私はファイルをループして、それらの拡張子を見ます:
$dir = '/tmp';
$dh = opendir($dir);
while (false !== ($fileName = readdir($dh))) {
$ext = substr($fileName, strrpos($fileName, '.') + 1);
if(in_array($ext, array("jpg","jpeg","png","gif")))
$files1[] = $fileName;
}
以下は、画像のみを取得する簡単な方法です。 PHP> = 5.2バージョンで動作します。拡張子のコレクションは小文字であるため、ループ内のファイル拡張子を小文字にすると、大文字と小文字が区別されなくなります。
// image extensions
$extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp');
// init result
$result = array();
// directory to scan
$directory = new DirectoryIterator('/dir/to/scan/');
// iterate
foreach ($directory as $fileinfo) {
// must be a file
if ($fileinfo->isFile()) {
// file extension
$extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
// check if extension match
if (in_array($extension, $extensions)) {
// add to result
$result[] = $fileinfo->getFilename();
}
}
}
// print result
print_r($result);
大文字と小文字を区別せず、画像のみの拡張機能が必要な場合に便利です。
結果の配列を後で検索し、条件に一致しないファイルを破棄できます。
scandir
には、求める機能がありません。
ディレクトリをスキャンしてファイル名のみを返したい場合は、これを使用できます:
_$fileNames = array_map(
function($filePath) {
return basename($filePath);
},
glob('./includes/*.{php}', GLOB_BRACE)
);
_
scandir()
は、ファイルだけでなく_.
_および_..
_を返すので、ファイル名だけが必要な場合や、実際のファイルパスで他のことをしたい場合は、上記のコードはきれいです