PHP를 사용하여 폴더 내의 총 파일 수를 반환합니다.
문제
디렉토리에서 이미지 수를 찾고 변수로 출력하는 더 나은/간단한 방법이 있습니까?
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;
}