目录
(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. 加密功能(待完善)