PHP 简易文件系统

目录

一、整体介绍

二、演示

三、BUG


(2021.9.1 已终止)

一、整体介绍

文件:绿色链接,点击则下载;

文件夹:蓝色链接;

显示该文件大小,创建及修改日期;

功能:新建目录,上传文件,逐个删除文件或目录(删除目录需该目录下无文件夹),批量复制文件,批量移动文件夹,登录保护,打包目录。

二、演示

  • 新建文件夹 + 目录检索

设计思路:如果创建目录已存在,不予创建。在新目录下写一份新的index.php引用根目录下的index.php(如:fwrite(fopen(路径,'w'), 'include_once (getRelative(根,新目录))'));。getRelative为根目录与新目录的相对路径。

//两文件的相对位置    	
function getRelative($root, $file)
{
    $path = '';
    $cur = 0;
	$arr_r = explode('/', $root);
	$arr_f = explode('/', $file);
	$count_r = count($arr_r) - 1;
	$count_f = count($arr_f) - 1;
					    
	while ($cur < $count_r && $cur < $count_f) {
    	if ($arr_r[$cur] != $arr_f[$cur]) {
		    break;
	    }
	    $cur++;
	}
	for ($i = $count_f; $i >= 0; $i--) {
		if ($i == $cur) {
            break;
		}
		$path.='../';
	}
	for ($i = $cur; $i <= $count_r; $i++) {
		$path.=sprintf("%s/", $arr_r[$i]);
	}

	$path = rtrim($path, '/');
	return $path;
}
  • 上传文件

  

  

设计思路:

对同名文件处理,加上标号。

// 重复文件
$i = 1;
$tmp = $filename;
while (file_exists($filename)) {
	$filename = substr($tmp, 0, strrpos($tmp, "."))."(".$i.").".substr($tmp, (strrpos($tmp, '.') + 1));
	$i++;
}

显示文件名长度用'~'省略处理(但不省略文件后缀名)。

$file = scandir('./');
foreach ($file as $item) {
	if (mb_strlen($item) > 15) {
		$show = mb_substr($item,0,15,"UTF8")."~.".substr($item, strrpos($item, '.') + 1);
	}
	else
	{
		$show = $item;
	}
	//echo $show."<br>";
}
  • 移动 + 重命名

使用rename()重命名文件路径方法,其它设计思路与复制基本相近,文件或目录路径不存在或文件移动至待移动文件夹下,则不做移动处理。

  • 复制

使用copy()方法,文件路径不存在或文件移动至待移动文件夹下,则不做复制处理。

// 复制
function cp($source, $dest){
    $file = basename($source);
  	$desct = $dest.DIRECTORY_SEPARATOR.$file;
  	return copy($source,$desct);
}
  • 删除

// 删除文件夹需要该文件夹下无文件夹
function deldir($dir) {
   //先删除目录下的文件:
   $dh = opendir($dir);
   while ($file = readdir($dh)) {
      if($file != "." && $file != "..") {
         $path = $dir."/".$file;
         if(!is_dir($path)) {
            unlink($path);
         } else {
            deldir($path);
         }
      }
   }
   closedir($dh);
   //删除当前文件夹:
   if(rmdir($dir)) {
      return true;
   } else {
      return false;
   }
}
// $f 为选定文件或文件夹
if (is_file($f) && $f != '.' && $f != '..' && $f != 'index.php' && $f != 'login.php') {
	unlink($f);	//文件删除
} else {
	deldir($f);	//文件夹删除
}
  • 游客权限访问

  • 打包目录

三、BUG

1. 上传文件类型审核。

if ($_FILES['myfile']['type']=='image/jpeg'||					//jpg
 	$_FILES['myfile']['type']=='image/gif'||						//gif
 	$_FILES['myfile']['type']=='image/png'||						//png
 	$_FILES['myfile']['type']=='application/zip'||					//zip
 	$_FILES['myfile']['type']=='application/x-rar-compressed'||		//rar
 	$_FILES['myfile']['type']=='text/plain'||						//txt
 	$_FILES['myfile']['type']=='application/msword'||				//doc
 	$_FILES['myfile']['type']=='application/vnd.openxmlformats-officedocument.wordprocessingml.document'||		                    //docx
 	$_FILES['myfile']['type']=='application/vnd.ms-excel'||			//xls
 	$_FILES['myfile']['type']=='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'||			                    //xlsx
 	$_FILES['myfile']['type']=='application/vnd.ms-powerpoint'||	//ppt
 	$_FILES['myfile']['type']=='application/vnd.openxmlformats-officedocument.presentationml.presentation'||	                    //pptx
 	$_FILES['myfile']['type']=='application/pdf'||					//pdf
 	$_FILES['myfile']['type']=='audio/x-mpeg'||						//mp3
 	$_FILES['myfile']['type']=='video/mp4'||						//mp4
 	$_FILES['myfile']['type']=='image/svg-xml'||					//svg
 	$_FILES['myfile']['type']=='application/json'||					//json
 	$_FILES['myfile']['type']=='text/javascript'					//js
 	) {
     // 上传操作
 } else {
     echo "<script> alert('格式问题'); </script>";	
 }

2. 中文显示问题

// $val
iconv("UTF-8", "GBK", $val)

3. 移动/复制后文件的中文文件名丢失

给待移动的文件名头部增加英文字符

4. 加密功能(待完善)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值