web-dev-qa-db-ja.com

PHPスクリプトは、ディレクトリ内のすべてのファイルをループしますか?

ディレクトリ内のすべてのファイルをループするPHPスクリプトを探しているので、フォーマット、印刷、リンクへの追加など、ファイル名を操作できます。ファイルを名前、タイプ、作成日/追加日/変更日でソートできるようにしたいと思います。 (空想ディレクトリ「インデックス」を考えてください。)また、スクリプト自体や他の「システム」ファイルなどのファイルのリストに除外を追加できるようにしたいと思います。 (.および..「ディレクトリ」のように。)

スクリプトを修正したいので、PHPのドキュメントを見て、自分でスクリプトを書く方法を学びたいと思っています。とはいえ、既存のスクリプト、チュートリアルなどがあれば、教えてください。

116
Moshe

DirectoryIterator を使用できます。 PHPマニュアルの例:

<?php
$dir = new DirectoryIterator(dirname(__FILE__));
foreach ($dir as $fileinfo) {
    if (!$fileinfo->isDot()) {
        var_dump($fileinfo->getFilename());
    }
}
?>
221
Morfildur

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);
}
?>
40
NexusRex

scandir()関数を使用します。

<?php
    $directory = '/path/to/files';

    if (! is_dir($directory)) {
        exit('Invalid diretory path');
    }

    $files = array();

    foreach (scandir($directory) as $file) {
        if ('.' === $file) continue;
        if ('..' === $file) continue;

        $files[] = $file;
    }

    var_dump($files);
?>
18
ChorData

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

11
Julian

このコードを使用して、ディレクトリをループ処理できます再帰的に

$path = "/home/myhome";
$rdi = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
foreach (new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::SELF_FIRST) as $file => $info) {
    echo $file."\n";
}
3
GameScripting

glob() には、並べ替えとパターンマッチングの機能があります。戻り値は配列であるため、必要な他のほとんどすべてを実行できます。

2
bcosca

完全を期すため(これはトラフィックの多いページのように見えるため)、古き良き dir() function を忘れないでください。

$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);
1
Sz.