php实现WEB在线文件管理器
程序员文章站
2022-08-26 15:59:12
1、效果图 功能包括: 文件夹:创建文件夹、查看文件夹、复制文件夹、剪切文件夹、删除文件夹、重命名文件夹 文件:查看文件、创建文件、编辑文件、复制文件、剪切文件、删除文件、重命名文件、下载文件、上传文件 2、目录结构预览 3、目录操作函数 dir.func.php
1、效果图
功能包括:
文件夹:创建文件夹、查看文件夹、复制文件夹、剪切文件夹、删除文件夹、重命名文件夹
文件:查看文件、创建文件、编辑文件、复制文件、剪切文件、删除文件、重命名文件、下载文件、上传文件
2、目录结构预览
3、目录操作函数 dir.func.php
<?php // 目录操作函数集合 //打开指定目录 /** * 遍历目录函数,只读取目录中的最外层的内容 * @param string $path * @return array */ function readdirectory($path) { $handle = opendir ( $path ); while ( ($item = readdir ( $handle )) !== false ) { //.和..这2个特殊目录 if ($item != "." && $item != "..") { if (is_file ( $path . "/" . $item )) { $arr ['file'] [] = $item; } if (is_dir ( $path . "/" . $item )) { $arr ['dir'] [] = $item; } } } closedir ( $handle ); return $arr; } //$path="file"; //print_r(readdirectory($path)); /** * 得到文件夹大小 * @param string $path * @return int */ function dirsize($path){ $sum=0; global $sum; $handle=opendir($path); while(($item=readdir($handle))!==false){ if($item!="."&&$item!=".."){ if(is_file($path."/".$item)){ $sum+=filesize($path."/".$item); } if(is_dir($path."/".$item)){ $func=__function__; $func($path."/".$item); } } } closedir($handle); return $sum; } //$path="file"; //echo dirsize($path); function createfolder($dirname){ //检测文件夹名称的合法性 if(checkfilename(basename($dirname))){ //当前目录下是否存在同名文件夹名称 if(!file_exists($dirname)){ if(mkdir($dirname,0777,true)){ $mes="文件夹创建成功"; }else{ $mes="文件夹创建失败"; } }else{ $mes="存在相同文件夹名称"; } }else{ $mes="非法文件夹名称"; } return $mes; } /** * 重命名文件夹 * @param string $oldname * @param string $newname * @return string */ function renamefolder($oldname,$newname){ //检测文件夹名称的合法性 if(checkfilename(basename($newname))){ //检测当前目录下是否存在同名文件夹名称 if(!file_exists($newname)){ if(rename($oldname,$newname)){ $mes="重命名成功"; }else{ $mes="重命名失败"; } }else{ $mes="存在同名文件夹"; } }else{ $mes="非法文件夹名称"; } return $mes; } function copyfolder($src,$dst){ //echo $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)){ $func=__function__; $func($src."/".$item,$dst."/".$item); } } } closedir($handle); return "复制成功"; } /** * 剪切文件夹 * @param string $src * @param string $dst * @return string */ function cutfolder($src,$dst){ //echo $src,"--",$dst; if(file_exists($dst)){ if(is_dir($dst)){ if(!file_exists($dst."/".basename($src))){ if(rename($src,$dst."/".basename($src))){ $mes="剪切成功"; }else{ $mes="剪切失败"; } }else{ $mes="存在同名文件夹"; } }else{ $mes="不是一个文件夹"; } }else{ $mes="目标文件夹不存在"; } return $mes; } /** * 删除文件夹 * @param string $path * @return string */ function delfolder($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)){ $func=__function__; $func($path."/".$item); } } } closedir($handle); rmdir($path); return "文件夹删除成功"; }
4、文件操作函数 file.func.php
<?php // 文件操作函数集合 //bytes/kb/mb/gb/tb/eb /** * 转换字节大小 * @param number $size * @return number */ function transbyte($size) { $arr = array ("b", "kb", "mb", "gb", "tb", "eb" ); $i = 0; while ( $size >= 1024 ) { $size /= 1024; $i ++; } return round ( $size, 2 ) . $arr [$i]; } /** * 创建文件 * @param string $filename * @return string */ function createfile($filename) { //file/1.txt //验证文件名的合法性,是否包含/,*,<>,?,| $pattern = "/[\/,\*,<>,\?\|]/"; if (! preg_match ( $pattern, basename ( $filename ) )) { //检测当前目录下是否存在同名文件 if (! file_exists ( $filename )) { //通过touch($filename)来创建 if (touch ( $filename )) { return "文件创建成功"; } else { return "文件创建失败"; } } else { return "文件已存在,请重命名后创建"; } } else { return "非法文件名"; } } /** * 重命名文件 * @param string $oldname * @param string $newname * @return string */ function renamefile($oldname,$newname){ // echo $oldname,$newname; //验证文件名是否合法 if(checkfilename($newname)){ //检测当前目录下是否存在同名文件 $path=dirname($oldname); if(!file_exists($path."/".$newname)){ //进行重命名 if(rename($oldname,$path."/".$newname)){ return "重命名成功"; }else{ return "重命名失败"; } }else{ return "存在同名文件,请重新命名"; } }else{ return "非法文件名"; } } /** *检测文件名是否合法 * @param string $filename * @return boolean */ function checkfilename($filename){ $pattern = "/[\/,\*,<>,\?\|]/"; if (preg_match ( $pattern, $filename )) { return false; }else{ return true; } } /** * 删除文件 * @param string $filename * @return string */ function delfile($filename){ if(unlink($filename)){ $mes="文件删除成功"; }else{ $mes="文件删除失败"; } return $mes; } /** * 下载文件操作 * @param string $filename */ function downfile($filename){ header("content-disposition:attachment;filename=".basename($filename)); header("content-length:".filesize($filename)); readfile($filename); } /** * 复制文件 * @param string $filename * @param string $dstname * @return string */ function copyfile($filename,$dstname){ if(file_exists($dstname)){ if(!file_exists($dstname."/".basename($filename))){ if(copy($filename,$dstname."/".basename($filename))){ $mes="文件复制成功"; }else{ $mes="文件复制失败"; } }else{ $mes="存在同名文件"; } }else{ $mes="目标目录不存在"; } return $mes; } function cutfile($filename,$dstname){ if(file_exists($dstname)){ if(!file_exists($dstname."/".basename($filename))){ if(rename($filename,$dstname."/".basename($filename))){ $mes="文件剪切成功"; }else{ $mes="文件剪切失败"; } }else{ $mes="存在同名文件"; } }else{ $mes="目标目录不存在"; } return $mes; } /** * 上传文件 * @param array $fileinfo * @param string $path * @param array $allowext * @param int $maxsize * @return string */ function uploadfile($fileinfo,$path,$allowext=array("gif","jpeg","jpg","png","txt"),$maxsize=10485760){ //判断错误号 if($fileinfo['error']==upload_err_ok){ //文件是否是通过http post方式上传上来的 if(is_uploaded_file($fileinfo['tmp_name'])){ //上传文件的文件名,只允许上传jpeg|jpg、png、gif、txt的文件 //$allowext=array("gif","jpeg","jpg","png","txt"); $ext=getext($fileinfo['name']); $uniqid=getuniqidname(); $destination=$path."/".pathinfo($fileinfo['name'],pathinfo_filename)."_".$uniqid.".".$ext; if(in_array($ext,$allowext)){ if($fileinfo['size']<=$maxsize){ if(move_uploaded_file($fileinfo['tmp_name'], $destination)){ $mes="文件上传成功"; }else{ $mes="文件移动失败"; } }else{ $mes="文件过大"; } }else{ $mes="非法文件类型"; } }else{ $mes="文件不是通过http post方式上传上来的"; } }else{ switch($fileinfo['error']){ case 1: $mes="超过了配置文件的大小"; break; case 2: $mes="超过了表单允许接收数据的大小"; break; case 3: $mes="文件部分被上传"; break; case 4: $mes="没有文件被上传"; break; } } return $mes; }
5、公共函数 common.func.php
<?php // 公共函数集合 /** * 提示操作信息的,并且跳转 * @param string $mes * @param string $url */ function alertmes($mes,$url){ echo "<script type='text/javascript'>alert('{$mes}');location.href='{$url}';</script>"; } /** * 截取文件扩展名 * @param string $filename * @return string */ function getext($filename){ return strtolower(pathinfo($filename,pathinfo_extension)); } /** * 产生唯一名称 * @param int $length * @return string */ function getuniqidname($length=10){ return substr(md5(uniqid(microtime(true),true)),0,$length); }
6、主文件 index.php
<?php require_once 'dir.func.php'; require_once 'file.func.php'; require_once 'common.func.php'; $path="file"; $path=$_request['path']?$_request['path']:$path; $act=$_request['act']; $filename=$_request['filename']; $dirname=$_request['dirname']; $info=readdirectory($path); if(!$info){ echo "<script>alert('没有文件或目录!!!');location.href='index.php';</script>"; } //print_r($info); $redirect="index.php?path={$path}"; if($act=="创建文件"){ //创建文件 // echo $path,"--"; // echo $filename; $mes=createfile($path."/".$filename); alertmes($mes,$redirect); }elseif($act=="showcontent"){ //查看文件内容 $content=file_get_contents($filename); //echo "<textarea readonly='readonly' cols='100' rows='10'>{$content}</textarea>"; //高亮显示php代码 //高亮显示字符串中的php代码 if(strlen($content)){ $newcontent=highlight_string($content,true); //高亮显示文件中的php代码 //highlight_file($filename); $str=<<<eof <table width='100%' bgcolor='pink' cellpadding='5' cellspacing="0" > <tr> <td>{$newcontent}</td> </tr> </table> eof; echo $str; }else{ alertmes("文件没有内容,请编辑再查看!",$redirect); } }elseif($act=="editcontent"){ //修改文件内容 //echo "编辑文件"; $content=file_get_contents($filename); //echo $content; $str=<<<eof <form action='index.php?act=doedit' method='post'> <textarea name='content' cols='190' rows='10'>{$content}</textarea><br/> <input type='hidden' name='filename' value='{$filename}'/> <input type="hidden" name="path" value="{$path}" /> <input type="submit" value="修改文件内容"/> </form> eof; echo $str; }elseif($act=="doedit"){ //修改文件内容的操作 $content=$_request['content']; //echo $content; if(file_put_contents($filename,$content)){ $mes="文件修改成功"; }else{ $mes="文件修改失败"; } alertmes($mes,$redirect); }elseif($act=="renamefile"){ //完成重命名 $str=<<<eof <form action="index.php?act=dorename" method="post"> 请填写新文件名:<input type="text" name="newname" placeholder="重命名"/> <input type='hidden' name='filename' value='{$filename}' /> <input type="submit" value="重命名"/> </form> eof; echo $str; }elseif($act=="dorename"){ //实现重命名的操做 $newname=$_request['newname']; $mes=renamefile($filename,$newname); alertmes($mes,$redirect); }elseif($act=="delfile"){ $mes=delfile($filename); alertmes($mes,$redirect); }elseif($act=="downfile"){ //完成下载的操作 $mes=downfile($filename); }elseif($act=="创建文件夹"){ $mes=createfolder($path."/".$dirname); alertmes($mes,$redirect); }elseif($act=="renamefolder"){ $str=<<<eof <form action="index.php?act=dorenamefolder" method="post"> 请填写新文件夹名称:<input type="text" name="newname" placeholder="重命名"/> <input type="hidden" name="path" value="{$path}" /> <input type='hidden' name='dirname' value='{$dirname}' /> <input type="submit" value="重命名"/> </form> eof; echo $str; }elseif($act=="dorenamefolder"){ $newname=$_request['newname']; //echo $newname,"-",$dirname,"-",$path; $mes=renamefolder($dirname,$path."/".$newname); alertmes($mes,$redirect); }elseif($act=="copyfolder"){ $str=<<<eof <form action="index.php?act=docopyfolder" method="post"> 将文件夹复制到:<input type="text" name="dstname" placeholder="将文件夹复制到"/> <input type="hidden" name="path" value="{$path}" /> <input type='hidden' name='dirname' value='{$dirname}' /> <input type="submit" value="复制文件夹"/> </form> eof; echo $str; }elseif($act=="docopyfolder"){ $dstname=$_request['dstname']; $mes=copyfolder($dirname,$path."/".$dstname."/".basename($dirname)); alertmes($mes,$redirect); }elseif($act=="cutfolder"){ $str=<<<eof <form action="index.php?act=docutfolder" method="post"> 将文件夹剪切到:<input type="text" name="dstname" placeholder="将文件剪切到"/> <input type="hidden" name="path" value="{$path}" /> <input type='hidden' name='dirname' value='{$dirname}' /> <input type="submit" value="剪切文件夹"/> </form> eof; echo $str; }elseif($act=="docutfolder"){ //echo "文件夹被剪切了"; $dstname=$_request['dstname']; $mes=cutfolder($dirname,$path."/".$dstname); alertmes($mes,$redirect); }elseif($act=="delfolder"){ //完成删除文件夹的操作 //echo "文件夹被删除了"; $mes=delfolder($dirname); alertmes($mes,$redirect); }elseif($act=="copyfile"){ $str=<<<eof <form action="index.php?act=docopyfile" method="post"> 将文件复制到:<input type="text" name="dstname" placeholder="将文件复制到"/> <input type="hidden" name="path" value="{$path}" /> <input type='hidden' name='filename' value='{$filename}' /> <input type="submit" value="复制文件"/> </form> eof; echo $str; }elseif($act=="docopyfile"){ $dstname=$_request['dstname']; $mes=copyfile($filename,$path."/".$dstname); alertmes($mes,$redirect); }elseif($act=="cutfile"){ $str=<<<eof <form action="index.php?act=docutfile" method="post"> 将文件剪切到:<input type="text" name="dstname" placeholder="将文件剪切到"/> <input type="hidden" name="path" value="{$path}" /> <input type='hidden' name='filename' value='{$filename}' /> <input type="submit" value="剪切文件"/> </form> eof; echo $str; }elseif($act=="docutfile"){ $dstname=$_request['dstname']; $mes=cutfile($filename,$path."/".$dstname); alertmes($mes,$redirect); }elseif($act=="上传文件"){ //print_r($_files); $fileinfo=$_files['myfile']; $mes=uploadfile($fileinfo,$path); alertmes($mes, $redirect); } ?> <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>insert title here</title> <link rel="stylesheet" href="cikonss.css" /> <script src="jquery-ui/js/jquery-1.10.2.js"></script> <script src="jquery-ui/js/jquery-ui-1.10.4.custom.js"></script> <script src="jquery-ui/js/jquery-ui-1.10.4.custom.min.js"></script> <link rel="stylesheet" href="jquery-ui/css/ui-lightness/jquery-ui-1.10.4.custom.css" type="text/css"/> <style type="text/css"> body,p,div,ul,ol,table,dl,dd,dt{ margin:0; padding: 0; } a{ text-decoration: none; } ul,li{ list-style: none; float: left; } #top{ width:100%; height:48px; margin:0 auto; background: #e2e2e2; } #navi a{ display: block; width:48px; height: 48px; } #main{ margin:0 auto; border:2px solid #abcdef; } .small{ width:25px; height:25px; border:0; } </style> <script type="text/javascript"> function show(dis){ document.getelementbyid(dis).style.display="block"; } function delfile(filename,path){ if(window.confirm("您确定要删除嘛?删除之后无法恢复哟!!!")){ location.href="index.php?act=delfile&filename="+filename+"&path="+path; } } function delfolder(dirname,path){ if(window.confirm("您确定要删除嘛?删除之后无法恢复哟!!!")){ location.href="index.php?act=delfolder&dirname="+dirname+"&path="+path; } } function showdetail(t,filename){ $("#showimg").attr("src",filename); $("#showdetail").dialog({ height:"auto", width: "auto", position: {my: "center", at: "center", collision:"fit"}, modal:false,//是否模式对话框 draggable:true,//是否允许拖拽 resizable:true,//是否允许拖动 title:t,//对话框标题 show:"slide", hide:"explode" }); } function goback($back){ location.href="index.php?path="+$back; } </script> </head> <body> <div id="showdetail" style="display:none"><img src="" id="showimg" alt=""/></div> <h1>在线文件管理器</h1> <div id="top"> <ul id="navi"> <li><a href="index.php" title="主目录"><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-home"></span></span></a></li> <li><a href="#" onclick="show('createfile')" title="新建文件" ><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-file"></span></span></a></li> <li><a href="#" onclick="show('createfolder')" title="新建文件夹"><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-folder"></span></span></a></li> <li><a href="#" onclick="show('uploadfile')"title="上传文件"><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-upload"></span></span></a></li> <?php $back=($path=="file")?"file":dirname($path); ?> <li><a href="#" title="返回上级目录" onclick="goback('<?php echo $back;?>')"><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-arrowleft"></span></span></a></li> </ul> </div> <form action="index.php" method="post" enctype="multipart/form-data"> <table width="100%" border="1" cellpadding="5" cellspacing="0" bgcolor="#abcdef" align="center"> <tr id="createfolder" style="display:none;"> <td>请输入文件夹名称</td> <td > <input type="text" name="dirname" /> <input type="hidden" name="path" value="<?php echo $path;?>"/> <input type="submit" name="act" value="创建文件夹"/> </td> </tr> <tr id="createfile" style="display:none;"> <td>请输入文件名称</td> <td > <input type="text" name="filename" /> <input type="hidden" name="path" value="<?php echo $path;?>"/> <input type="submit" name="act" value="创建文件" /> </td> </tr> <tr id="uploadfile" style="display:none;"> <td >请选择要上传的文件</td> <td ><input type="file" name="myfile" /> <input type="submit" name="act" value="上传文件" /> </td> </tr> <tr> <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($info['file']){ $i=1; foreach($info['file'] as $val){ $p=$path."/".$val; ?> <tr> <td><?php echo $i;?></td> <td><?php echo $val;?></td> <td><?php $src=filetype($p)=="file"?"file_ico.png":"folder_ico.png";?><img src="images/<?php echo $src;?>" alt="" title="文件"/></td> <td><?php echo transbyte(filesize($p));?></td> <td><?php $src=is_readable($p)?"correct.png":"error.png";?><img class="small" src="images/<?php echo $src;?>" alt=""/></td> <td><?php $src=is_writable($p)?"correct.png":"error.png";?><img class="small" src="images/<?php echo $src;?>" alt=""/></td> <td><?php $src=is_executable($p)?"correct.png":"error.png";?><img class="small" src="images/<?php echo $src;?>" alt=""/></td> <td><?php echo date("y-m-d h:i:s",filectime($p));?></td> <td><?php echo date("y-m-d h:i:s",filemtime($p));?></td> <td><?php echo date("y-m-d h:i:s",fileatime($p));?></td> <td> <?php //得到文件扩展名 $ext=strtolower(end(explode(".",$val))); $imageext=array("gif","jpg","jpeg","png"); if(in_array($ext,$imageext)){ ?> <a href="#" onclick="showdetail('<?php echo $val;?>','<?php echo $p;?>')"><img class="small" src="images/show.png" alt="" title="查看"/></a>| <?php }else{ ?> <a href="index.php?act=showcontent&path=<?php echo $path;?>&filename=<?php echo $p;?>" ><img class="small" src="images/show.png" alt="" title="查看"/></a>| <?php }?> <a href="index.php?act=editcontent&path=<?php echo $path;?>&filename=<?php echo $p;?>"><img class="small" src="images/edit.png" alt="" title="修改"/></a>| <a href="index.php?act=renamefile&path=<?php echo $path;?>&filename=<?php echo $p;?>"><img class="small" src="images/rename.png" alt="" title="重命名"/></a>| <a href="index.php?act=copyfile&path=<?php echo $path;?>&filename=<?php echo $p;?>"><img class="small" src="images/copy.png" alt="" title="复制"/></a>| <a href="index.php?act=cutfile&path=<?php echo $path;?>&filename=<?php echo $p;?>"><img class="small" src="images/cut.png" alt="" title="剪切"/></a>| <a href="#" onclick="delfile('<?php echo $p;?>','<?php echo $path;?>')"><img class="small" src="images/delete.png" alt="" title="删除"/></a>| <a href="index.php?act=downfile&path=<?php echo $path;?>&filename=<?php echo $p;?>"><img class="small" src="images/download.png" alt="" title="下载"/></a> </td> </tr> <?php $i++; } } ?> <!-- 读取目录的操作--> <?php if($info['dir']){ $i=$i==null?1:$i; foreach($info['dir'] as $val){ $p=$path."/".$val; ?> <tr> <td><?php echo $i;?></td> <td><?php echo $val;?></td> <td><?php $src=filetype($p)=="file"?"file_ico.png":"folder_ico.png";?><img src="images/<?php echo $src;?>" alt="" title="文件"/></td> <td><?php $sum=0; echo transbyte(dirsize($p));?></td> <td><?php $src=is_readable($p)?"correct.png":"error.png";?><img class="small" src="images/<?php echo $src;?>" alt=""/></td> <td><?php $src=is_writable($p)?"correct.png":"error.png";?><img class="small" src="images/<?php echo $src;?>" alt=""/></td> <td><?php $src=is_executable($p)?"correct.png":"error.png";?><img class="small" src="images/<?php echo $src;?>" alt=""/></td> <td><?php echo date("y-m-d h:i:s",filectime($p));?></td> <td><?php echo date("y-m-d h:i:s",filemtime($p));?></td> <td><?php echo date("y-m-d h:i:s",fileatime($p));?></td> <td> <a href="index.php?path=<?php echo $p;?>" ><img class="small" src="images/show.png" alt="" title="查看"/></a>| <a href="index.php?act=renamefolder&path=<?php echo $path;?>&dirname=<?php echo $p;?>"><img class="small" src="images/rename.png" alt="" title="重命名"/></a>| <a href="index.php?act=copyfolder&path=<?php echo $path;?>&dirname=<?php echo $p;?>"><img class="small" src="images/copy.png" alt="" title="复制"/></a>| <a href="index.php?act=cutfolder&path=<?php echo $path;?>&dirname=<?php echo $p;?>"><img class="small" src="images/cut.png" alt="" title="剪切"/></a>| <a href="#" onclick="delfolder('<?php echo $p;?>','<?php echo $path;?>')"><img class="small" src="images/delete.png" alt="" title="删除"/></a>| </td> </tr> <?php $i++; } } ?> </table> </form> </body> </html>
缺点:php混编