修改代码
<a href="#" onclick="show('uploadFile')" title="上传文件"><span
style="margin-left: 8px; margin-top: 0px; top: 4px;"
="icon icon-small icon-square"><span class="icon-upload"></span></span></a>
<tr id="uploadFile" style="display: none;">
<td>请选择要上传的文件</td>
<td><input type="file" name="myFile" /> <input type="submit"
name="act" value="上传文件" /></td>
</tr>
function getExt($filename){
return strtolower(pathinfo($filename,PATHINFO_EXTENSION));
}
function getUniqidName($length=10){
//uniqid 如果 prefix 参数为空,则返回的字符串有 13 个字符串长。
//如果 more_entropy 参数设置为 true,则是 23 个字符串长
return substr(md5(uniqid(microtime(true),true)),0,$length);
}
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 png gif txt
$ext = getExt ( $fileInfo ['name'] );
$uniqid = getUniqidName ();
$destination = $path . "/" . pathinfo ( $fileInfo ['name'], PATHINFO_FILENAME ) . "_" . $uniqid . "." . $ext;
if (in_array ( $ext, $allowExt )) {
// 10M
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;
}
else if($act=='上传文件'){
/*
Array
(
[myFile] => Array
(
[name] => Git及SVN地址.txt
[type] => text/plain
[tmp_name] => C:\wamp\tmp\phpA6E9.tmp
[error] => 0
[size] => 205
)
)
*
*/
//print_r($_FILES);
$fileInfo=$_FILES['myFile'];
$mes=uploadFile($fileInfo,$path);
alertMes($mes, $redirect);
}
common.func.php
<?php
/**
* 提示信息并跳转
* @param string $mes
* @param string $url
*/
function alertMes($mes, $url) {
echo "<script type='text/javascript' charset='gbk'>alert('$mes');location.href='$url'</script>";
}
function getExt($filename) {
return strtolower ( pathinfo ( $filename, PATHINFO_EXTENSION ) );
}
function getUniqidName($length = 10) {
// uniqid 如果 prefix 参数为空,则返回的字符串有 13 个字符串长。
// 如果 more_entropy 参数设置为 true,则是 23 个字符串长
return substr ( md5 ( uniqid ( microtime ( true ), true ) ), 0, $length );
}
?>
file.func.php
<?php
// require_once 'common.func.php';
/**
* 转化字节大小
*
* @param number $size
* @return number
*/
function transByte($size) {
// Bytes/KB/MB/GB/TB/EB
$arr = array (
"B",
"KB",
"MB",
"GB",
"TB",
"TB"
);
$i = 0;
while ( $size > 1024 ) {
$size /= 1024;
$i ++;
}
return round ( $size, 2 ) . $arr [$i];
}
function createFile($filename) {
// file/1.txt
// 验证文件名的合法性,是否包含/,*,<,>,?,|
$pattern = "/[\/,\*,<>,\?\|]/";
// basename 返回路径中的文件名部分
if (! (preg_match ( $pattern, basename ( $filename ) ))) {
// 检测当前目录下是否存在同名文件
if (! file_exists ( $filename )) {
// 通过touch创建
if (touch ( $filename )) {
return "创建文件成功";
} else {
return "创建文件失败";
}
} else {
return "文件已存在";
}
} else {
return "包含非法字符";
}
}
function renameFile($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 "非法文件名";
}
}
function checkFilename($filename) {
// 验证文件名的合法性,是否包含/,*,<,>,?,|
$pattern = "/[\/,\*,<>,\?\|]/";
// basename 返回路径中的文件名部分
if (preg_match ( $pattern, $filename )) {
return false;
} else {
return true;
}
}
function deleteFile($filename) {
if (unlink ( $filename )) {
$mes = "文件删除成功";
} else {
$mes = "文件删除失败";
}
return $mes;
}
function downFile($filename) {
header ( "content-disposition:attachment;filename=" . basename ( $filename ) );
header ( "content-length:" . filesize ( $filename ) );
readfile ( $filename );
}
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;
}
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 png gif txt
$ext = getExt ( $fileInfo ['name'] );
$uniqid = getUniqidName ();
$destination = $path . "/" . pathinfo ( $fileInfo ['name'], PATHINFO_FILENAME ) . "_" . $uniqid . "." . $ext;
if (in_array ( $ext, $allowExt )) {
// 10M
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;
}
?>
index.php
<?php
require_once ('dir.func.php');
require_once 'file.func.php';
require_once 'common.func.php';
$path = 'file';
$path = isset ( $_REQUEST ['path'] ) ? $_REQUEST ['path'] : $path;
$arr = readDirectory ( $path );
$act = isset ( $_REQUEST ['act'] ) ? $_REQUEST ['act'] : '';
$filename = isset ( $_REQUEST ['filename'] ) ? $_REQUEST ['filename'] : '?';
$redirect = "index.php?path={$path}";
$dirname = isset ( $_REQUEST ['dirname'] ) ? $_REQUEST ['dirname'] : '';
// echo $act."<br/>";
// echo $filename;
if (! (isset ( $arr ['file'] )) && ! (isset ( $arr ['dir'] ))) {
echo "<script>alert('没有文件或目录!');location.href='index.php';</script>";
}
if ($act == '创建文件') {
$mes = createFile ( $path . "/" . $filename );
alertMes ( $mes, $redirect );
} else if ($act == 'showContent') {
// 查看文件内容
$content = file_get_contents ( $filename );
if (strlen ( $content )) {
// textarea能完整显示代码
// echo "<textarea col='1000' rows='10'>$content</textarea>";
// 高亮显示字符创中的PHP代码 true不自动输出(echo)
$newContent = highlight_string ( $content, true );
// 高亮显示文件中的PHP代码
// $content=highlight_file($filename,true);
$str = <<<EOF
<table width='100%' bgcolor='pink' cellpadding='5' cellspacing='0'>
<tr>
<td>
{$newContent}
</td>
</tr>
</table>
EOF;
echo $str;
} else {
alertMes ( "文件没有内容,请编辑再查看!", $redirect );
}
} else if ($act == 'editContent') {
$content = file_get_contents ( $filename );
$str = <<<EOF
<form action='index.php?act=doEdit' method='post'>
<textarea name='content' col='190' rows='10'>{$content}</textarea>
<input type='hidden' name='filename' value='{$filename}'/>
<input type="submit" value="修改文件内容"/>
</form>
EOF;
echo $str;
} else if ($act == "doEdit") {
// 修改文件内容的操作
$content = $_REQUEST ['content'];
// echo $content;
if (file_put_contents ( $filename, $content )) {
$mes = "文件修改成功";
} else {
$mes = "文件修改失败";
}
alertMes ( $mes, $redirect );
} else if ($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;
} else if ($act == 'doRename') {
// 实现重命名操作
$newname = $_REQUEST ['newname'];
$mes = renameFile ( $filename, $newname );
alertMes ( $mes, $redirect );
} else if ($act == 'delFile') {
$mes = deleteFile ( $filename );
alertMes ( $mes, $redirect );
} else if ($act == 'downFile') {
// 完成下载的操作
$mes = downFile ( $filename );
} else if ($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;
} else if ($act == 'doCopyFolder') {
$dstname = $_REQUEST ['dstname'];
$mes = copyFolder ( $dirname, $path . "/" . $dstname . "/" . basename ( $dirname ) );
alertMes ( $mes, $redirect );
} else if ($act == 'renameFolder') {
$str = <<<EOF
<form action="index.php?act=doRenameFolder" method="post">
请填写新文件夹名称:<input type="text" name="newname" placeholder="重命名"/>
<input type="hidden" name="dirname" value='{$dirname}'/>
<input type="hidden" name="path" value='{$path}'/>
<input type="submit" value="重命名"/>
</form>
EOF;
echo $str;
} else if ($act == 'doRenameFolder') {
$newname = $_REQUEST ['newname'];
// imooc222
// file/aa/imooc1
// file/aa
// echo $newname."<br/>".$dirname."<br/>".$path;
$mes = renameFolder ( $dirname, $path . "/" . $newname );
alertMes ( $mes, $redirect );
} else if ($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;
} else if ($act == "doCutFolder") {
$dstname = $_REQUEST ['dstname'];
$mes = cutFolders ( $dirname, $path . "/" . $dstname );
alertMes ( $mes, $redirect );
} else if ($act == "delFolder") {
$mes = delFolder ( $dirname );
alertMes ( $mes, $redirect );
} else if ($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="dirname" value='{$filename}'/>
<input type="submit" value="复制文件"/>
</form>
EOF;
echo $str;
} else if ($act == 'doCopyFile') {
$dstname = $_REQUEST ['dstname'];
// echo $dirname."<br/>".$path."/".$dstname;
$mes = copyFile ( $dirname, $path . "/" . $dstname );
alertMes ( $mes, $redirect );
} else if ($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="dirname" value='{$filename}'/>
<input type="submit" value="剪切文件"/>
</form>
EOF;
echo $str;
} else if ($act == 'doCutFile') {
$dstname = $_REQUEST ['dstname'];
// echo $dirname."<br/>".$path."/".$dstname;
$mes = cutFile ( $dirname, $path . "/" . $dstname );
alertMes ( $mes, $redirect );
} else if ($act == '上传文件') {
/*
* Array ( [myFile] => Array ( [name] => Git及SVN地址.txt [type] => text/plain [tmp_name] => C:\wamp\tmp\phpA6E9.tmp [error] => 0 [size] => 205 ) )
*/
// 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){
if(window.confirm("您确定要删除嘛?删除之后无法恢复哟!!!")){
location.href="index.php?act=delFile&filename="+filename;
}
return false;
}
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;
}
function delFolder(dirname,path){
if(window.confirm("您确定要删除嘛?删除之后无法恢复哦")){
location.href="index.php?act=delFolder&dirname="+dirname+"&path="+path;
}
return false;
}
</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
$i = 1;
if (isset ( $arr ) && isset ( $arr ['file'] )) {
if ($arr ['file']) {
foreach ( $arr ['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 src="images/<?php echo $src?>" alt="" class="small" /></td>
<td><?php $src=is_writeable($p)?"correct.png":"error.png"?>
<img src="images/<?php echo $src?>" alt="" class="small" /></td>
<td><img
src="images/<?php echo (is_executable($p)? "correct.png":"error.png");?>"
alt="" class="small" /></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>
<?php
// 得到文件扩展名
// explode 将字符串打散为数组
// end() 函数将内部指针指向数组中的最后一个元素,并输出
$ext = strtolower ( end ( explode ( ".", $val ) ) );
$imageExt = array (
"gif",
"jpeg",
"jpg",
"png"
);
// in_array() 函数搜索数组中是否存在指定的值。
if (in_array ( $ext, $imageExt )) {
?>
<td><a href="#"
onclick="showDetail('<?php echo $val;?>','<?php echo $p;?>')"><img
class="small" src="images/show.png" alt="" title="查看" /></a>|
<?php
} else {
?>
<td><a href="index.php?act=showContent&filename=<?php echo $p?>"><img
class="small" src="images/show.png" alt="" title="查看" /></a>|
<?php
}
?>
<a href="index.php?act=editContent&filename=<?php echo $p?>"><img
class="small" src="images/edit.png" alt="" title="修改" /></a>| <a
href="index.php?act=renameFile&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="return delFile('<?php echo $p;?>')"><img
class="small" src="images/delete.png" alt="" title="删除" /></a>| <a
href="index.php?act=downFile&filename=<?php echo $p?>"><img
class="small" src="images/download.png" alt="" title="下载" /></a></td>
</tr>
<?php
$i ++;
}
} else {
// echo "<script type='text/javascript'>alert('没有文件!');</script>";
}
}
?>
<!-- 读取目录的操作 -->
<?php
if (isset ( $arr ['dir'] )) {
if ($arr ['dir']) {
foreach ( $arr ['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 src="images/<?php echo $src?>" alt="" class="small" /></td>
<td><?php $src=is_writeable($p)?"correct.png":"error.png"?>
<img src="images/<?php echo $src?>" alt="" class="small" /></td>
<td><img
src="images/<?php echo (is_executable($p)? "correct.png":"error.png");?>"
alt="" class="small" /></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;?>">
![](images/copy.png)
</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="return delFolder('<?php echo $p;?>','<?php echo $path?>')"><img
class="small" src="images/delete.png" alt="" title="删除" /></a>| <a
href="index.php?act=downFile&filename=<?php echo $p?>"><img
class="small" src="images/download.png" alt="" title="下载" /></a></td>
</tr>
<?php
$i ++;
}
} else {
// echo "<script type='text/javascript'>alert('没有目录!');</script>";
}
}
?>
</table>
</form>
</body>
</html>