php小代碼----目錄下讀取子檔案或子目錄
來源:互聯網
上載者:User
<?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)<br/> * 得到目錄下的直接子目錄或直接子檔案資訊 * @param string $modeInfo[可選]<p> * 返回目錄下資訊的模式 * mixed 返回所有的檔案名稱及目錄名 * dir 返回所有的目錄名 * file 返回所有的檔案名稱 * </p> * @param bool $defaultDir[可選]<p> * 是否包括預設的連結目錄..和. * false 不包括 * true 包括 * </p> * @param bool $fullPath[可選]<p> * 是否返回子檔案或目錄的路徑資訊 * true 是 * false 否 * <p> * @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() . ')';}