= 1073741824: $size_str = round($size_num / 1073741824 * 100) / 100 . ' GB'; break; case $size_num >= 1048576: $size_str = round($size_num / 1048576 * 100) / 100 . ' MB'; break; case $size_num >= 1024: $size_str = round($size_num / 1024 * 100) / 100 . ' KB'; break; default: $size_str = $size_num . ' Bytes'; break; } return $size_str; } /** * 删除指定目录下的文件和文件夹 * @param unknown $dirpath * @return boolean */ public function del_dir($dirpath) { $dh = opendir($dirpath); while (($file = readdir($dh)) !== false) { if ($file != "." && $file != "..") { $fullpath = $dirpath . "/" . $file; if (!is_dir($fullpath)) { unlink($fullpath); } else { $this->del_dir($fullpath); rmdir($fullpath); } } } closedir($dh); $isEmpty = true; $dh = opendir($dirpath); while (($file = readdir($dh)) !== false) { if ($file != "." && $file != "..") { $isEmpty = false; break; } } return $isEmpty; } /** * 文件强制下载 * @param unknown $dir */ public function dir_readfile($dir) { if (file_exists($dir)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($dir)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($dir)); ob_clean(); flush(); readfile($dir); } } /** * 压缩文件夹 * @param unknown $dir * @param unknown $zipfile */ public function zip_dir($dir, $zipfile, $newdir = '') { $zip = new ZipArchive(); if ($zip->open($zipfile, ZipArchive::CREATE) === TRUE) { add_file_toZip($dir, $zip, $newdir); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法 $zip->close(); //关闭处理的zip文件 } } /** * 读取文件单文件压缩 zipdir方法调用 * @param unknown $dir * @param unknown $zip */ public function add_file_toZip($dir, $zip, $newdir = '') { $handler = opendir($dir); //打开当前文件夹由$dir指定 $filename = readdir($handler); while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..',不要对他们进行操作 if (is_dir($dir . '/' . $filename)) {// 如果读取的某个对象是文件夹,则递归 $this->add_file_toZip($dir . "/" . $filename, $zip, $newdir); } else { //将文件加入zip对象 $new_dir_sep = substr($dir, strpos($dir, $newdir)); $zip->addFile($dir . "/" . $filename, $new_dir_sep . '/' . $filename); } } } @closedir($dir); } /** * 将读取到的目录以数组的形式展现出来 * @return array * opendir() 函数打开一个目录句柄,可由 closedir(),readdir() 和 rewinddir() 使用。 * is_dir() 函数检查指定的文件是否是目录。 * readdir() 函数返回由 opendir() 打开的目录句柄中的条目。 * @param array $files 所有的文件条目的存放数组 * @param string $file 返回的文件条目 * @param string $dir 文件的路径 * @param resource $handle 打开的文件目录句柄 */ public function dir_scan($dir) { //定义一个数组 $files = array(); //检测是否存在文件 if (is_dir($dir)) { //打开目录 if ($handle = opendir($dir)) { //返回当前文件的条目 while (($file = readdir($handle)) !== false) { //去除特殊目录 if ($file != "." && $file != "..") { //判断子目录是否还存在子目录 if (is_dir($dir . "/" . $file)) { //递归调用本函数,再次获取目录 $files[ $file ] = dir_scan($dir . "/" . $file); } else { //获取目录数组 $files[] = $file; } } } //关闭文件夹 closedir($handle); //返回文件夹数组 return $files; } } } /** * 创建文件夹 * * @param string $path 文件夹路径 * @param int $mode 访问权限 * @param bool $recursive 是否递归创建 * @return bool */ public function dir_mkdir($path = '', $mode = 0777, $recursive = true) { clearstatcache(); if (!is_dir($path)) { mkdir($path, $mode, $recursive); return chmod($path, $mode); } return true; } /** * 文件夹文件拷贝 * * @param string $src 来源文件夹 * @param string $dst 目的地文件夹 * @return bool */ public function dir_copy($src = '', $dst = '') { if (empty($src) || empty($dst)) { return false; } $dir = opendir($src); $this->dir_mkdir($dst); while (false !== ($file = readdir($dir))) { if (($file != '.') && ($file != '..')) { if (is_dir($src . '/' . $file)) { $this->dir_copy($src . '/' . $file, $dst . '/' . $file); } else { copy($src . '/' . $file, $dst . '/' . $file); } } } closedir($dir); return true; } }