编程技术

PHP 文件系统

cnguu · 10月7日 · 2018年

资料

PHP 文件系统思维导图

密码:Fetw

官方文档

面向对象的目录遍历

涉及接口:

示例:

<?php
/**
 * 面向对象的目录遍历
 * Class DirectoryScanner
 */
class DirectoryScanner
{
    /**
     * 获取目录中所有文件及文件夹
     * @param string $path 目录
     * @param bool $recursive 递归
     * @return array
     */
    public static function listContents($path, $recursive = false)
    {
        $item = $recursive ? static::getRecursiveDirectoryIterator($path) : static::getDirectoryIterator($path);
        $result = [];
        foreach ($item as $file) {
            if (in_array($file->getFilename(), ['.', '..'])) {
                continue;
            }
            $result[] = clone $file;
        }
        return $result;
    }

    /**
     * 获取目录迭代器
     * @param string $path 目录
     * @return DirectoryIterator::class
     */
    public static function getDirectoryIterator($path)
    {
        return new DirectoryIterator($path);
    }

    /**
     * 获取递归目录迭代器
     * @param string $path 目录
     * @param int $mode 遍历模式
     * RecursiveIteratorIterator::SELF_FIRST 从当前目录开始
     * RecursiveIteratorIterator::CHILD_FIRST 从子目录开始
     * @return RecursiveIteratorIterator::class
     */
    public static function getRecursiveDirectoryIterator($path, $mode = RecursiveIteratorIterator::SELF_FIRST)
    {
        return new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS),
            $mode
        );
    }
}
// 测试
$path = '/path/to/you';
var_dump(DirectoryScanner::listContents($path));
echo '<br><br>';
var_dump(DirectoryScanner::listContents($path, true));
0 条回应