-
php实现WEB在线文件管理器
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"
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式