[php] 디렉토리의 모든 파일을 반복하는 PHP 스크립트?

디렉토리의 모든 파일을 반복하는 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);