디렉토리의 모든 파일을 반복하는 PHP 스크립트를 찾고 있으므로 형식, 인쇄 또는 링크에 파일 이름 추가와 같은 파일 이름으로 작업을 수행 할 수 있습니다. 이름, 유형 또는 생성 / 추가 / 수정 날짜별로 파일을 정렬하고 싶습니다. (멋진 디렉토리 “인덱스”를 생각하십시오.) 또한 스크립트 자체 나 다른 “시스템”파일과 같은 파일 목록에 제외를 추가하고 싶습니다. (좋아요 .
및 ..
“디렉토리”.)
스크립트를 수정할 수 있기 때문에 PHP 문서를보고 직접 작성하는 방법을 배우는 데 더 관심이 있습니다. 기존 스크립트, 튜토리얼 및 기타 사항이 있으면 알려주십시오.
답변
DirectoryIterator를 사용할 수 있습니다 . PHP 매뉴얼의 예 :
<?php
$dir = new DirectoryIterator(dirname(__FILE__));
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
var_dump($fileinfo->getFilename());
}
}
?>
답변
DirectoryIterator 클래스에 액세스 할 수 없으면 다음을 시도하십시오.
<?php
$path = "/path/to/files";
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ('.' === $file) continue;
if ('..' === $file) continue;
// do something with the file
}
closedir($handle);
}
?>
답변
scandir()
기능을 사용하십시오 :
<?php
$directory = '/path/to/files';
if (!is_dir($directory)) {
exit('Invalid diretory path');
}
$files = array();
foreach (scandir($directory) as $file) {
if ($file !== '.' && $file !== '..') {
$files[] = $file;
}
}
var_dump($files);
?>
답변
을 사용할 수도 있습니다 FilesystemIterator
. 그런 다음 더 적은 코드가 필요 DirectoryIterator
하고, 자동으로 제거 .
하고 ..
.
// Let's traverse the images directory
$fileSystemIterator = new FilesystemIterator('images');
$entries = array();
foreach ($fileSystemIterator as $fileInfo){
$entries[] = $fileInfo->getFilename();
}
var_dump($entries);
//OUTPUT
object(FilesystemIterator)[1]
array (size=14)
0 => string 'aa[1].jpg' (length=9)
1 => string 'Chrysanthemum.jpg' (length=17)
2 => string 'Desert.jpg' (length=10)
3 => string 'giphy_billclinton_sad.gif' (length=25)
4 => string 'giphy_shut_your.gif' (length=19)
5 => string 'Hydrangeas.jpg' (length=14)
6 => string 'Jellyfish.jpg' (length=13)
7 => string 'Koala.jpg' (length=9)
8 => string 'Lighthouse.jpg' (length=14)
9 => string 'Penguins.jpg' (length=12)
10 => string 'pnggrad16rgb.png' (length=16)
11 => string 'pnggrad16rgba.png' (length=17)
12 => string 'pnggradHDrgba.png' (length=17)
13 => string 'Tulips.jpg' (length=10)
링크 :
http://php.net/manual/en/class.filesystemiterator.php
답변
이 코드를 사용하여 디렉토리를 반복적 으로 반복 할 수 있습니다 .
$path = "/home/myhome";
$rdi = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
foreach (new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::SELF_FIRST) as $file => $info) {
echo $file."\n";
}
답변
glob () 에는 정렬 및 패턴 일치에 대한 조항이 있습니다. 반환 값은 배열이므로 필요한 다른 모든 작업을 수행 할 수 있습니다.
답변
완성도를 높이려면 (이것은 트래픽이 많은 페이지 인 것 같습니다) 좋은 이전 dir()
기능을 잊지 마십시오 .
$entries = [];
$d = dir("/"); // dir to scan
while (false !== ($entry = $d->read())) { // mind the strict bool check!
if ($entry[0] == '.') continue; // ignore anything starting with a dot
$entries[] = $entry;
}
$d->close();
sort($entries); // or whatever desired
print_r($entries);