一、判断普通文件和目录
1.is_file()//判断给定文件名是否为一个正常的文件
2.is_dir()//判断给定文件名是否是一个目录
二、文件的属性
1.file_exists()//检查文件或目录是否存在
2.filesize()//取得普通文件大小
3.is_readable()//判断给定文件名是否可读
4.is_writable()//判断给定的文件名是否可写
5.filectime()//获取文件的创建时间
6.filemtime()//获取文件的修改时间
7.fileatime()//取得文件的上次访问时间
8.stat()//获取文件大部分属性值
三、目录的基本操作
1.basename()//返回路径中的文件名部分
2.dirname()//返回路径中的目录部分
3.pathinfo()//返回文件路径的信息
4.opendir()//打开目录句柄
5.readdir()//从目录句柄中读取条目,返回目录中下一个文件的文件名
6.rewinddir()//倒回目录句柄
7.closedir()//关闭目录句柄
8.mkdir()//新建目录
9.rmdir()//删除指定的空目录
10.scandir()//列出指定路径中的文件和目录
四、文件的基本操作
1.fopen()//打开文件或者 URL
2.fread()//读取文件
3.fgets()//从文件指针中读取一行
4.feof()//测试文件指针是否到了文件结束的位置
5.fwrite()//写入文件
6.rewind()//倒回文件指针的位置
7.flock()//轻便的咨询文件锁定
8.ftruncate()//将文件截断到给定的长度
9.fclose()//关闭一个已打开的文件指针
10.file() //把整个文件读入一个数组中
11.copy()//拷贝文件
12.unlink()//删除文件
13.file_get_contents()//将整个文件读入一个字符串
14.file_put_contents()//将字符串写入文件中
15.rename()//重命名一个文件或目录
16.readfile()//读入一个文件并写入到输出缓冲
示例
<?php require_once 'func.php'; $path = isset($_REQUEST['path']) ? $_REQUEST['path']:'file'; $info = readDirectory($path); $act = isset($_REQUEST['act']) ? $_REQUEST['act'] : ''; $filename = isset($_REQUEST['filename']) ? $_REQUEST['filename'] : ''; $dirname = isset($_REQUEST['dirname']) ? $_REQUEST['dirname'] : ''; $redirect = "index.php?path={$path}"; @$fileExt = !empty($filename) ? strtolower(end(explode('.', $filename))) : ''; $imageExt = ['gif', 'jpg', 'jpeg', 'png']; //创建文件 if ($act && $act == 'createFile') { $mes = createFile($path . '/' . $filename); alertMeg($mes,$redirect); } //查看文件(中文有乱码问题) if ($act && $act == 'showContent'){ if (in_array($fileExt, $imageExt)){//图片文件 ?> <image src="<?php echo $filename ?>"> <?php } else { $content = file_get_contents($filename); // highlight_file($filename);//高亮显示php代码 if (empty($content)) { alertMeg('内容为空', $redirect); } else { highlight_string($content);//高亮显示php代码, } } } //修改文件 if ($act && $act == 'editContent') { if (in_array($fileExt, $imageExt)) { alertMeg('图片无法修改',$redirect); } if ($_SERVER['REQUEST_METHOD'] == 'GET') { $content = file_get_contents($filename); ?> <form action="index.php?act=editContent&filename=<?= $filename ?>&path=<?= $path?>" method="post"> <textarea cols="100" rows="10" name="content"><?= $content ?></textarea><br> <input type="submit" value="修改"> </form> <?php } else { $bytes = file_put_contents($filename, $_POST['content']); if ($bytes >= 0) { alertMeg('修改成功',$redirect); } else { alertMeg('修改失败',$redirect); } } } //重命名文件 if ($act && $act == 'renameContent') { if ($_SERVER['REQUEST_METHOD'] == 'GET') { $fileInfo = pathinfo($filename); ?> <form action="index.php?act=renameContent&filename=<?= $filename ?>&path=<?= $path?>" method="post"> <table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3"> <tr > <td>请输入新文件名称</td> <td> <input type="text" name="newName" value="<?= $fileInfo['filename'] ?>"> <input type="hidden" name="extension" value="<?= $fileInfo['extension'] ?>"> <input type="submit" value="修改"> </td> </tr> </table> </form> <?php } else { $newName = $path . '/' .$_POST['newName'].'.'.$_POST['extension']; $checkName = checkName($newName); if($checkName['code'] == 1){ alertMeg($checkName['msg'],$redirect); } if(rename($filename,$newName)){ alertMeg('修改名称成功',$redirect); } else { alertMeg('修改名称失败',$redirect); } } } //复制文件 if ($act && $act == 'copeContent') { if ($_SERVER['REQUEST_METHOD'] == 'GET') { ?> <form action="index.php?act=copeContent&path=<?= $path?>&filename=<?= $filename?>" method="post"> <table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3"> <tr > <td>复制到</td> <td> <input type="text" name="dstname" placeholder="文件夹名称"> <input type="submit" value="复制"> </td> </tr> </table> </form> <?php } else { $dstname = $_POST['dstname']; $mes = copFile($filename,$path.'/'.$dstname); alertMeg($mes,$redirect); } } //剪切文件 if ($act && $act == 'cutContent') { if ($_SERVER['REQUEST_METHOD'] == 'GET') { ?> <form action="index.php?act=cutContent&path=<?= $path?>&filename=<?= $filename?>" method="post"> <table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3"> <tr > <td>剪切到</td> <td> <input type="text" name="dstname" placeholder="文件夹名称"> <input type="submit" value="剪切"> </td> </tr> </table> </form> <?php } else { $dstname = $_POST['dstname']; $mes = cutFile($filename,$path.'/'.$dstname); alertMeg($mes,$redirect); } } //删除文件 if ($act && $act == 'delContent') { if(!file_exists($filename)){ alertMeg('要删除的文件不存在',$redirect); } if(unlink($filename)){ alertMeg('删除成功',$redirect); }else{ alertMeg('删除失败',$redirect); } } //上传文件 if($act && $act == 'uploadFile'){ $myFile = $_FILES['myFile']; print_r($myFile); $mes = uploadFile($myFile,$path); alertMeg($mes,$redirect); } //下载文件 if ($act && $act == 'downContent') { downFile($filename); } //创建文件夹 if ($act && $act == 'createDir') { $dirname = $_POST['dirname']; $mes = createDir($path . '/' . $dirname); alertMeg($mes,$redirect); } //复制文件夹 if ($act && $act == 'copyDir') { // echo $path.'----'.$dirname;die; if ($_SERVER['REQUEST_METHOD'] == 'GET') { ?> <form action="index.php?act=copyDir&path=<?= $path?>&dirname=<?= $dirname?>" method="post"> <table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3"> <tr > <td>复到到</td> <td> <input type="text" name="dstname" placeholder="文件夹名称"> <input type="submit" value="复制"> </td> </tr> </table> </form> <?php } else { $dstname = $_POST['dstname']; // print_r($path.'/'.$dstname.'/'.basename($dirname));die; $mes = copyDir($dirname,$path.'/'.$dstname.'/'.basename($dirname)); alertMeg($mes,$redirect); } } //重命名文件夹 if ($act && $act == 'renameDir') { if ($_SERVER['REQUEST_METHOD'] == 'GET') { ?> <form action="index.php?act=renameDir&dirname=<?= $dirname ?>&path=<?= $path ?>" method="post"> <table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3"> <tr> <td>请输入新文件夹名称</td> <td> <input type="text" name="newDirName" value=""> <input type="submit" value="修改"> </td> </tr> </table> </form> <?php } else { $newName = $path . '/' . $_POST['newDirName']; $checkName = checkName($newName); if ($checkName['code'] == 1) { alertMeg($checkName['msg'], $redirect); } if (rename($dirname, $newName)) { alertMeg('修改名称成功', $redirect); } else { alertMeg('修改名称失败', $redirect); } } } //剪切文件夹 if ($act && $act == 'cutDir') { // echo $path.'----'.$dirname;die; if ($_SERVER['REQUEST_METHOD'] == 'GET') { ?> <form action="index.php?act=cutDir&path=<?= $path?>&dirname=<?= $dirname?>" method="post"> <table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#7fff00"> <tr > <td>剪切到</td> <td> <input type="text" name="dstname" placeholder="文件夹名称"> <input type="submit" value="剪切"> </td> </tr> </table> </form> <?php } else { $dstname = $_POST['dstname']; $mes = cutDir($dirname,$path.'/'.$dstname); alertMeg($mes,$redirect); } } //删除文件夹 if ($act && $act == 'delDir') { $mes = delDir($dirname); alertMeg($mes,$redirect); } ?> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件管理器</title> <style type="text/css"> .image{ width: 20px;height: 20px; } .topImage{ width: 38px;height: 38px; } /*#inputTable{*/ /*width :40%;*/ /*border:1px;*/ /*cellpadding:5px;*/ /*cellspacing:0px;*/ /*bgcolor:#d3d3d3;*/ /*}*/ </style> </head> <body> <div id="top"> <a href="index.php" ><img title="主页" class="topImage" src="icon/home.png"></a> <a href="#" onclick="showFile('createFile')"><img title="创建文件" class="topImage" src="icon/createfile.png"></a> <a href="#" onclick="showFile('uploadFile')"><img title="上传文件" class="topImage" src="icon/upload.png"></a> <a href="#" onclick="showFile('createDir')"><img title="创建文件夹" class="topImage" src="icon/createfolder.png"></a> <?php $back = ($path == 'file') ? 'file' : "'".dirname($path)."'"?> <a href="#" onclick="back(<?php echo $back ?>)"><img title="返回" class="topImage" src="icon/return.png"></a> </div> <table id="inputTable" width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3"> <tr id="createFile" style="display:none" > <form action="index.php" method="post"> <td>请输入文件名称</td> <td> <input type="text" name="filename"> <input type="hidden" name="act" value="createFile"> <input type="hidden" name="path" value="<?= $path?>"> <input type="submit" value="创建文件"> </td> </form> </tr> <tr id="createDir" style="display:none"> <form action="index.php" method="post"> <td>请输入文件夹名称</td> <td> <input type="text" name="dirname"> <input type="hidden" name="act" value="createDir"> <input type="hidden" name="path" value="<?= $path?>"> <input type="submit" value="创建文件夹"> </td> </form> </tr> <tr id="uploadFile" style="display:none" > <form action="index.php" method="post" enctype="multipart/form-data"> <td>请选择文件</td> <td> <input type="file" name="myFile"> <input type="hidden" name="act" value="uploadFile"> <input type="hidden" name="path" value="<?= $path?>"> <input type="submit" value="上传"> </td> </form> </tr> </table> <table width="100%" align="center" border="1" cellpadding="5" cellspacing="0" bgcolor="white"> <tr bgcolor="#808080"> <td>编号</td> <td>名称</td> <td>类型</td> <td>大小</td> <td>是否可读</td> <td>是否可写</td> <td>是否可执行</td> <td>创建时间</td> <td>修改时间</td> <td>访问时间</td> <td>操作</td> </tr> <?php if (isset($info['file'])) { $i = 1; foreach ($info['file'] as $v) { $p = $path.'/'.$v; ?> <tr> <td><?= $i?></td> <td><?= $v?></td> <td><?php $filetype = filetype($p)?><img class="image" src="icon/<?= $filetype?>.png"></td> <td><?= getFileSize(filesize($p))?></td> <td><?php $isReadable = is_readable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isReadable?>.png"></td> <td><?php $isWritable = is_writable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isWritable?>.png"></td> <td><?php $isExecutable = is_executable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isExecutable?>.png"></td> <td><?= date("Y-m-d H:i:s",filectime($p)) ?></td> <td><?= date("Y-m-d H:i:s",filemtime($p)) ?></td> <td><?= date("Y-m-d H:i:s",fileatime($p)) ?></td> <td> <a href="index.php?act=showContent&filename=<?= $p?>&path=<?= $path?>"><img title="查看" class="image" src="icon/see.png"></a> <a href="index.php?act=editContent&filename=<?= $p?>&path=<?= $path?>"><img title="编辑" class="image" src="icon/edit.png"></a> <a href="index.php?act=renameContent&filename=<?= $p?>&path=<?= $path?>"><img title="重命名" class="image" src="icon/rename.png"></a> <a href="index.php?act=copeContent&filename=<?= $p?>&path=<?= $path?>"><img title="复制" class="image" src="icon/copy.png"></a> <a href="index.php?act=cutContent&filename=<?= $p?>&path=<?= $path?>"><img title="剪切" class="image" src="icon/shear.png"></a> <a href="index.php?act=delContent&filename=<?= $p?>&path=<?= $path?>"><img title="删除" class="image" src="icon/delete.png"></a> <a href="index.php?act=downContent&filename=<?= $p?>"><img title="下载" class="image" src="icon/download.png"></a> </td> </tr> <?php $i++; } } ?> <?php if (isset($info['dir'])) { foreach ($info['dir'] as $v) { $p = $path.'/'.$v; ?> <tr> <td><?= isset($i) ? $i :1?></td> <td><?= $v?></td> <td><?php $filetype = filetype($p)?><img class="image" src="icon/<?= $filetype?>.png"></td> <td><?php $dirSum = 0; echo getFileSize(dirSize($p)) //遍历时清空全局变量,防止累加?></td> <td><?php $isReadable = is_readable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isReadable?>.png"></td> <td><?php $isWritable = is_writable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isWritable?>.png"></td> <td><?php $isExecutable = is_executable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isExecutable?>.png"></td> <td><?= date("Y-m-d H:i:s",filectime($p)) ?></td> <td><?= date("Y-m-d H:i:s",filemtime($p)) ?></td> <td><?= date("Y-m-d H:i:s",fileatime($p)) ?></td> <td> <a href="index.php?path=<?= $p?>"><img title="查看" class="image" src="icon/see.png"></a> <a href="index.php?act=copyDir&path=<?= $path?>&dirname=<?= $p?>"><img title="复制" class="image" src="icon/copy.png"></a> <a href="index.php?act=renameDir&path=<?= $path?>&dirname=<?= $p?>"><img title="重命名" class="image" src="icon/rename.png"></a> <a href="index.php?act=cutDir&path=<?= $path?>&dirname=<?= $p?>"><img title="剪切" class="image" src="icon/shear.png"></a> <a href="index.php?act=delDir&path=<?= $path?>&dirname=<?= $p?>"><img title="删除" class="image" src="icon/delete.png"></a> </td> </tr> <?php @$i++; } } ?> </table> </body> </html> <script type="text/javascript"> //展示隐藏的输入框 function showFile(dis) { document.getElementById(dis).style.display = "block"; } //删除文件(有问题的会出发showFile()) function delfile() { alert('112'); if(window.confirm('确定删除')){ location.href="index.php?act=delContent&filename="+filename } } function back(back) { location.href ="index.php?path="+back; } </script>
<?php /** * Created by PhpStorm. * User: shanxiongtao * Date: 2019/12/3 * Time: 20:27 */ /** * 封装函数打开指定目录 * @param $path * @return array */ function readDirectory($path){ $handle = opendir($path); // print_r($handle);die; $arr = []; while (($item = readdir($handle)) !== false){ if($item != '.' && $item != '..'){ if(is_file($path.'/'.$item)){ $arr['file'][] = $item; } if(is_dir($path.'/'.$item)){ $arr['dir'][] = $item; } } } closedir($handle); return $arr; } /** * 递归获取文件夹大小 * @param $path * @return array */ function dirSize($path){ global $dirSum;//定义全局变量 $handle = opendir($path); while (($item = readdir($handle)) !== false){ if($item != '.' && $item != '..'){ if(is_file($path.'/'.$item)){ $dirSum += filesize($path.'/'.$item);//求和文件大小 } if(is_dir($path.'/'.$item)){//如果文件夹继续求和 dirSize($path.'/'.$item); } } } closedir($handle); return $dirSum; } /** * 求文件大小 Bytes/KB/MB/GB/TB * @param $size * @return string */ function getFileSize($size){ $arr = ['b','Kb','Mb','Gb','Tb']; $i = 0; while ($size >= 1024){ $size /= 1024; $i++; } return round($size,2).$arr[$i]; } /** * 创建文件 * @param $fileName * @return string */ function createFile($fileName) { $checkName = checkName($fileName); if ($checkName['code'] == 0) { if (touch($fileName)) { return $fileName . "文件创建成功"; } else { return $fileName . "文件创建失败"; } } else { return $checkName['msg']; } } /** * 检测名称 * @param $fileName * @return bool|string */ function checkName($fileName){ $return = ['code' => 0, 'msg' => 'success']; if(empty($fileName)){ return $return = [ 'code' => 1, 'msg' => "文件名称不可为空" ]; } //验证文件名称的合法性 $pattern = "/[\/,\*,<>,\?\|]/"; if (preg_match($pattern, basename($fileName))) { return $return = [ 'code' => 1, 'msg' => $fileName . "文件名称不合法" ]; } //检测当前目录是否存在同名文件 if(file_exists($fileName)){ return $return = [ 'code' => 1, 'msg' => $fileName . "文件已经存在" ]; } return $return; } /** * 检测文件夹名称 * @param $dst * @return array */ function checkDirName($dst){ $return = ['code' => 0, 'msg' => 'success']; if(!file_exists($dst)){ return $return = [ 'code' => 1, 'msg' => "目标文件夹不存在" ]; } if(!is_dir($dst)){ return $return = [ 'code' => 1, 'msg' => "目标不是文件夹" ]; } return $return; } /** * 提示和跳转函数 * @param $mes * @param string $url */ function alertMeg($mes, $url = 'index.php') { echo "<script>alert('{$mes}');location.href='$url';</script>"; } /** * 下载文件 * @param $fileName */ function downFile($fileName){ header("content-disposition:attachment;filename=".basename($fileName)); header("content-length:".filesize($fileName)); readfile($fileName); } /** * 创建文件夹 * @param $dirname * @return string */ function createDir($dirname) { $checkName = checkName($dirname); if ($checkName['code'] == 0) { if (mkdir($dirname,0777,true)) { return $dirname . "创建成功"; } else { return $dirname . "创建失败"; } } else { return $checkName['msg']; } } /** * 复制文件夹 * @param $path * @return array */ function copyDir($src,$dst){ if(!file_exists($dst)){ mkdir($dst,0777,true); } $handle = opendir($src); while (($item = readdir($handle)) !== false){ if($item != '.' && $item != '..'){ if(is_file($src.'/'.$item)){ copy($src.'/'.$item,$dst.'/'.$item); } if(is_dir($src.'/'.$item)){//如果文件夹继续 copyDir($src.'/'.$item,$dst.'/'.$item); } } } closedir($handle); return "复制成功"; } /** * 剪切文件夹 * @param $src * @param $dst * @return string */ function cutDir($src,$dst){ $checkDirName = checkDirName($dst); if($checkDirName['code'] == 1){ return $checkDirName['msg']; } if(file_exists($dst.'/'.basename($src))){ return '存在同名文件夹'; } if(rename($src,$dst.'/'.basename($src))){ return '剪切成功'; }else{ return '剪切失败'; } } /** * 删除文件夹 * @param $path * @return string */ function delDir($path){ // return $path; $handle = opendir($path); while (($item = readdir($handle)) !== false){ if($item != '.' && $item != '..'){ if(is_file($path.'/'.$item)){ unlink($path.'/'.$item); } if(is_dir($path.'/'.$item)){//如果文件夹继续 delDir($path.'/'.$item); } } } closedir($handle); rmdir($path); return "删除成功"; } /** * 复制文件 * 文件名称 $filename * 要复制的路径 $dst * @return mixed|string */ function copFile($filename,$dst){ $checkDirName = checkDirName($dst); if($checkDirName['code'] == 1){ return $checkDirName['msg']; } if(file_exists($dst.'/'.basename($filename))){ return '存在同名文件'; } if(copy($filename,$dst.'/'.basename($filename))){ return '复制成功'; }else{ return '复制失败'; } } /** * 剪切文件 * 文件名称 $filename * 要复制的路径 $dst * @return mixed|string */ function cutFile($filename,$dst){ $checkDirName = checkDirName($dst); if($checkDirName['code'] == 1){ return $checkDirName['msg']; } if(file_exists($dst.'/'.basename($filename))){ return '存在同名文件'; } if(rename($filename,$dst.'/'.basename($filename))){ return '剪切成功'; }else{ return '剪切失败'; } } /** * 上传文件 * @param $myFile * @param $path * @return mixed|string */ function uploadFile($myFile,$path){ $allowEXT = ['gif','jpg','png','txt','doc','docx']; $maxSize = 10485760; //10M //检测上传路径合法性 $checkDirName = checkDirName($path); if($checkDirName['code'] == 1){ return $checkDirName['msg']; } if($myFile['error'] != 0){ switch ($myFile['error']){ case 1: $msg = '上传的文件超过了配置大小';break; case 2: $msg = '上传文件的大小超过表单限制';break; case 3: $msg = '文件只有部分被上传';break; case 4: $msg = '没有文件被上传';break; case 6: $msg = '找不到临时文件夹';break; case 7: $msg = '文件写入失败';break; } return $msg; } if(!is_uploaded_file($myFile['tmp_name'])){ return '不是通过http的POST方式上传'; } if(!in_array(getExt($myFile['name']),$allowEXT)){ return '上传文件类型不合法'; } if($myFile['size'] >= $maxSize){ return '上传文件过大'; } $fileName = pathinfo($myFile['name'],PATHINFO_FILENAME); $fileExt = getExt($myFile['name']); $destination = $path.'/'.$fileName.'_'.getUnique().'.'.$fileExt; if(move_uploaded_file($myFile['tmp_name'],$destination)){// return '上传成功'; }else{ return '上传失败'; } } /** * 获取文件的扩展名 * @param $filename * @return string */ function getExt($filename){ if(empty($filename)){ return ''; } return strtolower(pathinfo($filename,PATHINFO_EXTENSION)); } /** * 获取唯一值 * 长度 $len * @return bool|string */ function getUnique($len = 10){ return substr(md5(uniqid(microtime(true),true)),0,$len); }