<?php namespace app\common\lib; use RecursiveIteratorIterator; use RecursiveDirectoryIterator; class FileHelper { /** * 检测目录并循环创建目录 * @param $dir * @return bool */ public static function mkdirs($dir) { if (!file_exists($dir)) { self::mkdirs(dirname($dir)); mkdir($dir, 0755); } return true; } /** * 转换为/结尾的路径 * @param $path string 文件夹路径 * @return string */ public static function getDirPath($path) { //去掉path最右侧的/号,再重新组装带/路径 return rtrim(str_replace('\\','/',$path),'/') . '/'; } /** * 复制文件夹文件和子文目录文件,可排除目录复制 升级+备份代码 * @param $source * @param $dest * @param array $exdir * @param $delete * @return bool */ public static function copyDir($source, $dest, array $exdir = ['app'], $delete = false) { if (!is_dir($dest)) self::mkdirs($dest); foreach ( $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST ) as $item) { if ($item->isDir()) { $sontDir = $dest . $iterator->getSubPathName(); if(in_array($sontDir,$exdir)){ continue; } if (!is_dir($sontDir)) { self::mkdirs($sontDir); } } else { try { copy((string)$item, $dest . $iterator->getSubPathName()); } catch (\Exception $e) { throw new \Exception($e->getMessage()); } if($delete) unlink($item); } } return true; } }