• php获取目录下文件夹列表(递归)


    php遍历文件夹方法

    原理

    • 递归获取
    /**
     * 获取目录下文件夹列表(递归).
     *
     * @param string $dir 目录
     *
     * @return array 文件夹列表(递归函数返回的是路径的全称,和非递归返回的有区别)
     */
    function GetDirsInDir_Recursive($dir)
    {
        $dirs = array();
    
        if (!file_exists($dir)) {
            return array();
        }
        if (!is_dir($dir)) {
            return array();
        }
        $dir = str_replace('\\', '/', $dir);
        if (substr($dir, -1) !== '/') {
            $dir .= '/';
        }
    
        if (function_exists('scandir')) {
            foreach (scandir($dir, 0) as $d) {
                if (is_dir($dir . $d)) {
                    if (($d != '.') && ($d != '..')) {
                        $array = GetDirsInDir($dir . $d);
                        if (count($array) > 0) {
                            foreach ($array as $key => $value) {
                                $dirs[] = $dir . $d . '/' . $value;
                            }
                        }
                        $dirs[] = $dir . $d;
                    }
                }
            }
        } else {
            $handle = opendir($dir);
            if ($handle) {
                while (false !== ($file = readdir($handle))) {
                    if ($file != "." && $file != "..") {
                        if (is_dir($dir . $file)) {
                            $array = GetDirsInDir($dir . $file);  //此方法在下面,请往下看
                            if (count($array) > 0) {
                                foreach ($array as $key => $value) {
                                    $dirs[] = $dir . $file . '/' . $value;
                                }
                            }
                            $dirs[] = $dir . $file;
                        }
                    }
                }
                closedir($handle);
            }
        }
    
        return $dirs;
    }
    
    /**
     * 获取当前目录下文件夹列表.
     *
     * @param string $dir 目录
     *
     * @return array 文件夹列表
     */
    function GetDirsInDir($dir)
    {
        $dirs = array();
    
        if (!file_exists($dir)) {
            return array();
        }
        if (!is_dir($dir)) {
            return array();
        }
        $dir = str_replace('\\', '/', $dir);
        if (substr($dir, -1) !== '/') {
            $dir .= '/';
        }
    
        // 此处的scandir虽然是PHP 5就已加入的内容,但必须加上兼容处理
        // 部分一键安装包的早期版本对其进行了禁用
        // 这一禁用对安全没有任何帮助,推测是早期互联网流传下来的“安全秘笈”。
        // @see: https://github.com/licess/lnmp/commit/bd34d5c803308afdac61626018e4168716d089ae#diff-6282e7667da1e2fc683bed06f87f74c1
        if (function_exists('scandir')) {
            foreach (scandir($dir, 0) as $d) {
                if (is_dir($dir . $d)) {
                    if (($d != '.') && ($d != '..')) {
                        $dirs[] = $d;
                    }
                }
            }
        } else {
            $handle = opendir($dir);
            if ($handle) {
                while (false !== ($file = readdir($handle))) {
                    if ($file != "." && $file != "..") {
                        if (is_dir($dir . $file)) {
                            $dirs[] = $file;
                        }
                    }
                }
                closedir($handle);
            }
        }
    
        return $dirs;
    }
    
    
  • 相关阅读:
    点分治练习
    PKU-2723 Get Luffy Out(2-SAT+二分)
    tarjan求割点与割边
    tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows
    数算日子荣耀神
    《JavaScript DOM编程艺术》笔记
    CSS链接的样式a:link,a:visited,a:hover,a:active
    chrome调试技巧--持续更新
    CSS文字大小单位PX、EM的区别
    【转】如何成为一名优秀的web前端工程师(前端攻城师)?
  • 原文地址:https://www.cnblogs.com/wenhainan/p/16154665.html
Copyright © 2020-2023  润新知