php文件操作(常用方法)
-
重新格式化文件大小的数据
// 重新格式化数据 function formatFileSize($bytes){ $size = 0; while($bytes > 0){ if( $bytes >= pow(2, 40) ){ $ret[] = array( 'value' => floor($bytes/pow(1024, 4)), 'suffix' => 'T' ); $bytes = $bytes%pow(1024, 4); }else if( $bytes >= pow(2, 30) ){ $ret[] = array( 'value' => floor($bytes/pow(1024, 3)), 'suffix' => 'G' ); $bytes = $bytes%pow(1024, 3); }else if( $bytes >= pow(2, 20) ){ $ret[] = array( 'value' => floor($bytes/pow(1024, 2)), 'suffix' => 'M' ); $bytes = $bytes%pow(1024, 2); }else if( $bytes >= pow(2, 10) ){ $ret[] = array( 'value' => floor($bytes/1024), 'suffix' => 'K' ); $bytes = $bytes%1024; }else{ $ret[] = array( 'value' => $bytes, 'suffix' => 'B' ); $bytes = 0; } } if( isset($ret)&&$ret ){ foreach($ret as $s){ $size .= $s['value'].$s['suffix']; } } return $size; }
-
获取文件类型
// 获取文件类型 function getFileType($fileName){ switch( filetype($fileName) ){ case 'file': $type = '普通文件'; break; case 'dir': $type = '目录文件'; break; case 'block': $type = '块设备文件'; break; case 'char': $type = '字符设备文件'; break; case 'fifo': $type = '命名管道文件'; break; case 'link': $type = '符号链接'; break; default: $type = '未知类型'; } return $type; }
-
计算目录大小
// 计算目录大小 function dirSize($dirname){ $size = 0; if($dir_handle = opendir($dirname)){ while($filename = readdir($dir_handle)){ if($filename!='.' && $filename!='..'){ $subFile = $dirname.'/'.$filename; if(is_dir($subFile)){ $size += dirsize($subFile); } if(is_file($subFile)){ $size += filesize($subFile); } } } closedir($dir_handle); } return $size; }
-
获取文件信息(用到上面三个方法)
// 获取文件信息 function getFilePro($fileName){ $ret = array( 'success' => false, 'msg' => '目录文件不存在', 'file' => null ); if( !file_exists($fileName) ){ return $ret; } $parts = pathinfo($fileName); $data['name'] = basename($fileName); $data['extension'] = isset($parts['extension']) ? $parts['extension'] : 'none'; $data['type'] = getFileType($fileName); switch (filetype($fileName)) { case 'file': $data['size'] = formatFileSize(filesize($fileName)); break; case 'dir': $data['size'] = formatFileSize(dirSize($fileName)); break; default: $data['size'] = 0; } if( is_readable($fileName) ){ $data['readable'] = '可读'; } if( is_writable($fileName) ){ $data['writable'] = '可写'; } if( is_executable($fileName) ){ $data['executable'] = '可执行'; } $data['create'] = date('Y年m月j日', filectime($fileName)); $data['modify'] = date('Y年m月j日', filemtime($fileName)); $data['access'] = date('Y年m月j日', fileatime($fileName)); $ret['success'] = true; $ret['msg'] = '目录文件存在'; $ret['file'] = $data; return $ret; }
-
遍历目录(与计算目录大小方法步骤相似)
// 遍历目录 function traverseDir($dirname){ $ret = array(); $dir_handle = opendir($dirname); while($file = readdir($dir_handle)){ $dirFile = $dirname.'/'.$file; $filePro = getFilePro($dirFile); if($filePro['success']){ $ret[] = $filePro['file']; } } closedir($dir_handle); //return $ret; foreach($ret as $file){ foreach($file as $k => $v){ echo $k, '==', $v, '<br/>'; } echo '<br/>'; } }
-
复制目录
// 复制目录 function copyDir($dirSrc, $dirTo){ if(is_file($dirTo)){ return; } if(!file_exists($dirTo)){ mkdir($dirTo); } if($dir_handle = opendir($dirSrc)){ while($filename = readdir($dir_handle)){ if($filename!='.' && $filename!='..'){ $subSrcFile = $dirSrc.'/'.$filename; $subToFile = $dirTo.'/'.$filename; if(is_dir($subSrcFile)){ copydir($subSrcFile, $subToFile); } if(is_file($subSrcFile)){ copy($subSrcFile, $subToFile); } } } closedir($dir_handle); } }
-
删除目录
/** * 使用 mkdir()函数只需要传入一个目录名即可很容易地建立一个新目录。 * 删除目录所用的函数rmdir()只能删除一个空目录并且目录必须存在; * 若是非空目录就要先进入到目录中,使用unlink()函数将目录中的每个文件都删除掉, * 再回来将这个空目录删除; * 若是目录中还存在子目录且子目录也非空,就要用到递归方法。 */ function delDir($dirname){ if(file_exists($dirname)){ if($dir_handle = opendir($dirname)){ while($filename = readdir($dir_handle)){ if($filename!='.' && $filename!='..'){ $subFile = $dirname.'/'.$filename; if(is_dir($subFile)){ deldir($subFile); } if(is_file($subFile)){ unlink($subFile); } } } closedir($dir_handle); rmdir($dirname); } } }
-
移动目录(即先复制目录,然后删除原来目录)
浙公网安备 33010602011771号