문제

재귀 검색을 사용하여 지정된 디렉토리의 파일을 반환하려고합니다. 나는 이것을 성공적으로 달성했지만, 반환하려는 특정 확장을 지정할 수있는 몇 줄의 코드를 추가하고 싶습니다.

예를 들어 디렉토리에서 .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);

최상위에 투표 한 답변과 관련하여 : 나는 더 적은 기능을 사용하는이 코드를 만들었습니다. isset(), array_flip(), explode() 4 가지 기능 대신. 나는 최고 투표 답변을 테스트했으며 내 것보다 느 렸습니다. 내 시도를하는 것이 좋습니다.

$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 />";
    }
}

유사한 검색을 위해 Glob () 사용에 대해이 페이지를 확인할 수 있습니다.

http://www.electrictoolbox.com/php-glob-find-files/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top