ホームページ >バックエンド開発 >PHPチュートリアル >PHP の小さなコード ディレクトリ内のサブファイルまたはサブディレクトリを読み取ります。
<?phpclass 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() . ')';}