문제

디렉토리에서 이미지 수를 찾고 변수로 출력하는 더 나은/간단한 방법이 있습니까?

function dirCount($dir) {
  $x = 0;
  while (($file = readdir($dir)) !== false) {
    if (isImage($file)) {$x = $x + 1}
  }
  return $x;
}

이것은 이것을하는 긴 길처럼 보인다. 더 간단한 방법이 없습니까?

메모: 파일이 이미지 인 경우 isimage () 함수는 true를 반환합니다.

도움이 되었습니까?

해결책

DirectoryIterator의 표준 PHP 라이브러리 (일명 SPL)를 확인하십시오.

$dir = new DirectoryIterator('/path/to/dir');
foreach($dir as $file ){
  $x += (isImage($file)) ? 1 : 0;
}

(fyi iterator_count ()라는 서류 미비 기능이 있지만 지금은 그것에 의존하지 않는 것이 가장 좋습니다. 그리고 당신은 보이지 않는 것들을 필터링해야합니다.

다른 팁

이것은 당신에게 당신의 dir에있는 것의 수를 줄 것입니다. I'll leave the part about counting only images to you as I am about to fallll aaasssllleeelppppppzzzzzzzzzzzzz.

iterator_count(new DirectoryIterator('path/to/dir/'));

나는 이것처럼한다 :

$files = scandir($dir);
$x = count($files);
echo $x;

그러나 그것은 또한 계산됩니다. 그리고 ..

앞서 언급 한 코드

$count = count(glob("*.{jpg,png,gif,bmp}"));

최고이지만 {jpg, png, gif} 비트는 당신이 추가 할 때만 작동합니다. GLOB_BRACE 끝에 플래그 :

$count = count(glob("*.{jpg,png,gif,bmp}", GLOB_BRACE));

당신은 사용할 수 있습니다 glob...

$count = 0;
foreach (glob("*.*") as $file) {
    if (isImage($file)) ++$count;
}

또는 이것이 당신의 요구에 얼마나 잘 어울리는 지 잘 모르겠지만 당신은 이것을 할 수 있습니다.

$count = count(glob("*.{jpg,png,gif,bmp}"));

SPL을 사용하여 A의 내용을 필터링 할 수도 있습니다. DirectoryIterator 당신의 사용 isImage 초록을 확장하여 기능합니다 FilterIterator 수업.

class ImageIterator extends FilterIterator {

    public function __construct($path)
    {
        parent::__construct(new DirectoryIterator($path));
    }

    public function accept()
    {
        return isImage($this->getInnerIterator());
    }
}

그런 다음 사용할 수 있습니다 iterator_count (또는 구현 Countable 원본을 인터페이스하고 사용하십시오 count 기능) 이미지 수를 결정합니다. 예를 들어:

$images = new ImageIterator('/path/to/images');
printf('Found %d images!', iterator_count($images));

이 코드를 사용해야하는 방법에 따라이 접근법을 사용하면 isImage function into the ImageIterator 클래스는 모든 것이 한 곳에 깔끔하게 마무리되도록합니다.

다음을 사용하여 Laravel의 한 디렉토리에 모든 유형의 파일 수를 얻습니다.

   $dir = public_path('img/');
    $files = glob($dir . '*.*');

    if ( $files !== false )
    {
        $total_count = count( $files );
        return $totalCount;
    }
    else
    {
        return 0;
    }

당신의 대답은 당신이 그것을 얻을 수있는만큼 단순한 것 같습니다. PHP 또는 Perl에서 더 짧은 방법을 생각할 수 없습니다.

Linux를 사용하는 경우 LS, WC 및 Grep과 관련된 시스템 / exec 명령을 사용할 수 있습니다.

그럼에도 불구하고, 나는 당신이 가진 것만 충분하다고 생각합니다. 한 번만 기능을 작성하면됩니다.

이를 사용하여 디렉토리에서 모든 파일 수를 반환합니다. 그리고 ..

return count(glob("/path/to/file/[!\.]*"));

여기에 있습니다 글로벌 필터의 좋은 목록 파일 매칭 목적.

$nfiles = glob("/path/to/file/[!\\.]*");

if ($nfiles !== FALSE){

    return count($nfiles);

} else {

    return 0;

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