再帰検索を使用して、指定したディレクトリのファイルを返そうとしています。私はこれを成功させましたが、返したい特定の拡張子を指定できるようにする数行のコードを追加したいと思います。
たとえば、ディレクトリ内の.jpgファイルのみを返します。
これが私のコードです
<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
echo $file . "<br/> \n";
}
?>
これを達成するために上記のコードに何を追加できるか教えてください、ありがとう
<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$display = Array ( 'jpeg', 'jpg' );
foreach(new RecursiveIteratorIterator($it) as $file)
{
if (in_array(strtolower(array_pop(explode('.', $file))), $display))
echo $file . "<br/> \n";
}
?>
フィルターを作成する必要があります。
class JpegOnlyFilter extends RecursiveFilterIterator
{
public function __construct($iterator)
{
parent::__construct($iterator);
}
public function accept()
{
return $this->current()->isFile() && preg_match("/\.jpe?g$/ui", $this->getFilename());
}
public function __toString()
{
return $this->current()->getFilename();
}
}
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$it = new JpegOnlyFilter($it);
$it = new RecursiveIteratorIterator($it);
foreach ($it as $file)
...
これを試してください。許可されたファイルタイプの配列を使用し、ファイル拡張子が配列内に存在する場合にのみファイルをエコー出力します。
<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$allowed=array("pdf","txt");
foreach(new RecursiveIteratorIterator($it) as $file) {
if(in_array(substr($file, strrpos($file, '.') + 1),$allowed)) {
echo $file . "<br/> \n";
}
}
?>
また、許可されたファイルタイプの配列をRecursiveDirectoryIterator
クラスに渡して、一致するファイルのみを返すことができる場合もあります。
PHP仕事をする:
$directory = new RecursiveDirectoryIterator('path/to/directory/');
$iterator = new RecursiveIteratorIterator($directory);
$regex = new RegexIterator($iterator, '/\.jpe?g$/i', RecursiveRegexIterator::GET_MATCH);
echo '<pre>';
print_r($regex);
上位投票の回答について:4つではなく、3つだけのisset()
、array_flip()
、explode()
を使用して、このコードを作成しました。私は上位投票の回答をテストしましたが、私のものよりも遅くなりました。私に試してみることをお勧めします:
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
$FILE = array_flip(explode('.', $file));
if (isset($FILE['php']) || isset($FILE['jpg'])) {
echo $file. "<br />";
}
}