Home >php教程 >php手册 >php小代码----目录下读取子文件或子目录

php小代码----目录下读取子文件或子目录

WBOY
WBOYOriginal
2016-06-13 08:54:391169browse

php小代码----目录下读取子文件或子目录

 

class RecDir {

 

    protected $rootPath;

    protected $opDirectory;

 

    const RECDIR_MIXED = 'mixed';

    const RECDIR_DIR = 'dir';

    const RECDIR_FILE = 'file';

 

    public $errorMsg = '';

    public $errorNo = 0;

 

    public function __construct($rootPath) {

        $this->rootPath = $rootPath;

        if (is_dir($this->rootPath)) {

            $this->rootPath = pathinfo($this->rootPath, PATHINFO_DIRNAME) . DIRECTORY_SEPARATOR . pathinfo($this->rootPath, PATHINFO_BASENAME);

            $this->opDirectory = dir($this->rootPath);

        } else {

            $this->errorMsg = '您提供的目录不存在!';

            $this->errorNo = 1001;

            throw new Exception($this->errorMsg, $this->errorNo);

        }

    }

 

    private function read($directory, $parentPath, $modeInfo = 'mixed', $defaultDir = false, $fullPath = false) {

        $dirInfo = array();

        while (FALSE !== ($childDirOrFileName = $directory->read())) {

            switch ($modeInfo) {

                case self::RECDIR_MIXED:

                    if ($defaultDir) {

                        $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;

                    } else {

                        if ($childDirOrFileName != '.' && $childDirOrFileName != '..') {

                            $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;

                        }

                    }

                    break;

                case self::RECDIR_DIR:

                    if (is_dir($parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName)) {

                        if ($defaultDir) {

                            $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;

                        } else {

                            if ($childDirOrFileName != '.' && $childDirOrFileName != '..') {

                                $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;

                            }

                        }

                    }

                    break;

                case self::RECDIR_FILE:

                    if (is_file($parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName)) {

                        $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;

                    }

                    break;

            }

        }

        return $dirInfo;

    }

     /**

      * (PHP 5 >= 5.4.0)

      * 得到目录下的直接子目录或直接子文件信息

      * @param string $modeInfo[可选]

      * 返回目录下信息的模式

      * mixed  返回所有的文件名及目录名

      * dir    返回所有的目录名

      * file   返回所有的文件名

      *

      * @param bool $defaultDir[可选]

      * 是否包括默认的链接目录..和.

      * false  不包括

      * true   包括

      *

      * @param bool $fullPath[可选]

      * 是否返回子文件或目录的路径信息

      * true  是

      * false 否

      *

      * @return array 返回一个数组,记录了该目录下的信息

      */

    public function getPathDirectDirInfo($modeInfo = 'mixed', $defaultDir = false, $fullPath = false) {

        return $this->read($this->opDirectory, $this->rootPath, $modeInfo, $defaultDir, $fullPath);

    }    

}

 

//----------------------------test-----------------------------------------

header("Content-type:text/html; charset=UTF-8");

try {

    $recDir = new RecDir('./CALLTEMP/');

    $dirs = $recDir->getPathDirectDirInfo('file', true, true);

    var_dump($dirs);

} catch (Exception $ex) {

    echo '在文件【' . $ex->getFile() . '】中的第' . $ex->getLine() . '行报错:' . $ex->getMessage() . '(' . $ex->getCode() . ')';

}

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn