47

使用中に拡張子jpeg、などの画像のみを取得する方法はありますか?pnggif

$dir    = '/tmp';
$files1 = scandir($dir);
4

7 に答える 7

98

使用できますglob

$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);

これを大文字と小文字を区別しないようにする必要がある場合は、DirectoryIteratorをと組み合わせて使用​​するRegexIterator 、の結果をに渡して、scandir不要array_mapな拡張子をフィルタリングするコールバックを使用できます。を使用するかstrposfnmatch拡張pathinfo機能を取得するかはあなた次第です。

于 2010-07-12T07:20:57.507 に答える
63

実際の質問はscandirを使用しており、回答は最終的にglobになります。ブロブがかなり重い場所の両方に大きな違いがあります。次のコードを使用して、scandirで同じフィルタリングを実行できます。

$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));

これが誰かに役立つことを願っています。

于 2016-07-06T13:15:38.613 に答える
14

私はファイルをループして、それらの拡張子を調べます。

$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);
于 2010-07-12T07:24:45.610 に答える
14

画像のみを取得する簡単な方法は次のとおりです。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);

大文字と小文字を区別せず、画像のみの拡張機能が必要な場合に、これが役立つことを願っています。

于 2015-04-29T15:39:02.827 に答える
9

後で結果の配列を検索し、条件に一致しないファイルを破棄できます。

scandir求めている機能がありません。

于 2010-07-12T07:20:20.033 に答える
3

ディレクトリをスキャンしてファイル名のみを返したい場合は、次を使用できます。

$fileNames = array_map(
    function($filePath) {
        return basename($filePath);
    },
    glob('./includes/*.{php}', GLOB_BRACE)
);

scandir().はファイルと同様に返さ..れるので、ファイル名だけが必要な場合、または実際のファイルパスで他のことをしたい場合は、上記のコードの方がクリーンです。

于 2017-11-18T17:17:40.450 に答える
1

理解と使用を容易にするために、上記のソリューションの一部を再利用してまとめたコードを作成しました。

<?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);
于 2021-09-18T21:39:05.360 に答える