使用中に拡張子jpeg
、などの画像のみを取得する方法はありますか?png
gif
$dir = '/tmp';
$files1 = scandir($dir);
使用中に拡張子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;
}
closedir($dh);
画像のみを取得する簡単な方法は次のとおりです。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()
.
はファイルと同様に返さ..
れるので、ファイル名だけが必要な場合、または実際のファイルパスで他のことをしたい場合は、上記のコードの方がクリーンです。
理解と使用を容易にするために、上記のソリューションの一部を再利用してまとめたコードを作成しました。
<?php
//put the absolute or relative path to your target directory
$images = scandir("./images");
$output = array();
$filer = '/(.jpg|.png|.jpeg|.gif|.bmp))/';
foreach($images as $image){
if(preg_match($filter, strtolower($image))){
$output[] = $image;
}
}
var_dump($output);