一、判断普通文件和目录
1.is_file()//判断给定文件名是否为一个正常的文件
2.is_dir()//判断给定文件名是否是一个目录
二、文件的属性
1.file_exists()//检查文件或目录是否存在
2.filesize()//取得普通文件大小
3.is_readable()//判断给定文件名是否可读
4.is_writable()//判断给定的文件名是否可写
5.filectime()//获取文件的创建时间
6.filemtime()//获取文件的修改时间
7.fileatime()//取得文件的上次访问时间
8.stat()//获取文件大部分属性值
三、目录的基本操作
1.basename()//返回路径中的文件名部分
2.dirname()//返回路径中的目录部分
3.pathinfo()//返回文件路径的信息
4.opendir()//打开目录句柄
5.readdir()//从目录句柄中读取条目,返回目录中下一个文件的文件名
6.rewinddir()//倒回目录句柄
7.closedir()//关闭目录句柄
8.mkdir()//新建目录
9.rmdir()//删除指定的空目录
10.scandir()//列出指定路径中的文件和目录
四、文件的基本操作
1.fopen()//打开文件或者 URL
2.fread()//读取文件
3.fgets()//从文件指针中读取一行
4.feof()//测试文件指针是否到了文件结束的位置
5.fwrite()//写入文件
6.rewind()//倒回文件指针的位置
7.flock()//轻便的咨询文件锁定
8.ftruncate()//将文件截断到给定的长度
9.fclose()//关闭一个已打开的文件指针
10.file() //把整个文件读入一个数组中
11.copy()//拷贝文件
12.unlink()//删除文件
13.file_get_contents()//将整个文件读入一个字符串
14.file_put_contents()//将字符串写入文件中
15.rename()//重命名一个文件或目录
16.readfile()//读入一个文件并写入到输出缓冲
示例
<?php
require_once 'func.php';
$path = isset($_REQUEST['path']) ? $_REQUEST['path']:'file';
$info = readDirectory($path);
$act = isset($_REQUEST['act']) ? $_REQUEST['act'] : '';
$filename = isset($_REQUEST['filename']) ? $_REQUEST['filename'] : '';
$dirname = isset($_REQUEST['dirname']) ? $_REQUEST['dirname'] : '';
$redirect = "index.php?path={$path}";
@$fileExt = !empty($filename) ? strtolower(end(explode('.', $filename))) : '';
$imageExt = ['gif', 'jpg', 'jpeg', 'png'];
//创建文件
if ($act && $act == 'createFile') {
$mes = createFile($path . '/' . $filename);
alertMeg($mes,$redirect);
}
//查看文件(中文有乱码问题)
if ($act && $act == 'showContent'){
if (in_array($fileExt, $imageExt)){//图片文件
?>
<image src="<?php echo $filename ?>">
<?php
} else {
$content = file_get_contents($filename);
// highlight_file($filename);//高亮显示php代码
if (empty($content)) {
alertMeg('内容为空', $redirect);
} else {
highlight_string($content);//高亮显示php代码,
}
}
}
//修改文件
if ($act && $act == 'editContent') {
if (in_array($fileExt, $imageExt)) {
alertMeg('图片无法修改',$redirect);
}
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$content = file_get_contents($filename);
?>
<form action="index.php?act=editContent&filename=<?= $filename ?>&path=<?= $path?>" method="post">
<textarea cols="100" rows="10" name="content"><?= $content ?></textarea><br>
<input type="submit" value="修改">
</form>
<?php
} else {
$bytes = file_put_contents($filename, $_POST['content']);
if ($bytes >= 0) {
alertMeg('修改成功',$redirect);
} else {
alertMeg('修改失败',$redirect);
}
}
}
//重命名文件
if ($act && $act == 'renameContent') {
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$fileInfo = pathinfo($filename);
?>
<form action="index.php?act=renameContent&filename=<?= $filename ?>&path=<?= $path?>" method="post">
<table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3">
<tr >
<td>请输入新文件名称</td>
<td>
<input type="text" name="newName" value="<?= $fileInfo['filename'] ?>">
<input type="hidden" name="extension" value="<?= $fileInfo['extension'] ?>">
<input type="submit" value="修改">
</td>
</tr>
</table>
</form>
<?php
} else {
$newName = $path . '/' .$_POST['newName'].'.'.$_POST['extension'];
$checkName = checkName($newName);
if($checkName['code'] == 1){
alertMeg($checkName['msg'],$redirect);
}
if(rename($filename,$newName)){
alertMeg('修改名称成功',$redirect);
} else {
alertMeg('修改名称失败',$redirect);
}
}
}
//复制文件
if ($act && $act == 'copeContent') {
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
?>
<form action="index.php?act=copeContent&path=<?= $path?>&filename=<?= $filename?>" method="post">
<table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3">
<tr >
<td>复制到</td>
<td>
<input type="text" name="dstname" placeholder="文件夹名称">
<input type="submit" value="复制">
</td>
</tr>
</table>
</form>
<?php
} else {
$dstname = $_POST['dstname'];
$mes = copFile($filename,$path.'/'.$dstname);
alertMeg($mes,$redirect);
}
}
//剪切文件
if ($act && $act == 'cutContent') {
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
?>
<form action="index.php?act=cutContent&path=<?= $path?>&filename=<?= $filename?>" method="post">
<table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3">
<tr >
<td>剪切到</td>
<td>
<input type="text" name="dstname" placeholder="文件夹名称">
<input type="submit" value="剪切">
</td>
</tr>
</table>
</form>
<?php
} else {
$dstname = $_POST['dstname'];
$mes = cutFile($filename,$path.'/'.$dstname);
alertMeg($mes,$redirect);
}
}
//删除文件
if ($act && $act == 'delContent') {
if(!file_exists($filename)){
alertMeg('要删除的文件不存在',$redirect);
}
if(unlink($filename)){
alertMeg('删除成功',$redirect);
}else{
alertMeg('删除失败',$redirect);
}
}
//上传文件
if($act && $act == 'uploadFile'){
$myFile = $_FILES['myFile'];
print_r($myFile);
$mes = uploadFile($myFile,$path);
alertMeg($mes,$redirect);
}
//下载文件
if ($act && $act == 'downContent') {
downFile($filename);
}
//创建文件夹
if ($act && $act == 'createDir') {
$dirname = $_POST['dirname'];
$mes = createDir($path . '/' . $dirname);
alertMeg($mes,$redirect);
}
//复制文件夹
if ($act && $act == 'copyDir') {
// echo $path.'----'.$dirname;die;
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
?>
<form action="index.php?act=copyDir&path=<?= $path?>&dirname=<?= $dirname?>" method="post">
<table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3">
<tr >
<td>复到到</td>
<td>
<input type="text" name="dstname" placeholder="文件夹名称">
<input type="submit" value="复制">
</td>
</tr>
</table>
</form>
<?php
} else {
$dstname = $_POST['dstname'];
// print_r($path.'/'.$dstname.'/'.basename($dirname));die;
$mes = copyDir($dirname,$path.'/'.$dstname.'/'.basename($dirname));
alertMeg($mes,$redirect);
}
}
//重命名文件夹
if ($act && $act == 'renameDir') {
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
?>
<form action="index.php?act=renameDir&dirname=<?= $dirname ?>&path=<?= $path ?>"
method="post">
<table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3">
<tr>
<td>请输入新文件夹名称</td>
<td>
<input type="text" name="newDirName" value="">
<input type="submit" value="修改">
</td>
</tr>
</table>
</form>
<?php
} else {
$newName = $path . '/' . $_POST['newDirName'];
$checkName = checkName($newName);
if ($checkName['code'] == 1) {
alertMeg($checkName['msg'], $redirect);
}
if (rename($dirname, $newName)) {
alertMeg('修改名称成功', $redirect);
} else {
alertMeg('修改名称失败', $redirect);
}
}
}
//剪切文件夹
if ($act && $act == 'cutDir') {
// echo $path.'----'.$dirname;die;
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
?>
<form action="index.php?act=cutDir&path=<?= $path?>&dirname=<?= $dirname?>" method="post">
<table width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#7fff00">
<tr >
<td>剪切到</td>
<td>
<input type="text" name="dstname" placeholder="文件夹名称">
<input type="submit" value="剪切">
</td>
</tr>
</table>
</form>
<?php
} else {
$dstname = $_POST['dstname'];
$mes = cutDir($dirname,$path.'/'.$dstname);
alertMeg($mes,$redirect);
}
}
//删除文件夹
if ($act && $act == 'delDir') {
$mes = delDir($dirname);
alertMeg($mes,$redirect);
}
?>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件管理器</title>
<style type="text/css">
.image{
width: 20px;height: 20px;
}
.topImage{
width: 38px;height: 38px;
}
/*#inputTable{*/
/*width :40%;*/
/*border:1px;*/
/*cellpadding:5px;*/
/*cellspacing:0px;*/
/*bgcolor:#d3d3d3;*/
/*}*/
</style>
</head>
<body>
<div id="top">
<a href="index.php" ><img title="主页" class="topImage" src="icon/home.png"></a>
<a href="#" onclick="showFile('createFile')"><img title="创建文件" class="topImage" src="icon/createfile.png"></a>
<a href="#" onclick="showFile('uploadFile')"><img title="上传文件" class="topImage" src="icon/upload.png"></a>
<a href="#" onclick="showFile('createDir')"><img title="创建文件夹" class="topImage" src="icon/createfolder.png"></a>
<?php $back = ($path == 'file') ? 'file' : "'".dirname($path)."'"?>
<a href="#" onclick="back(<?php echo $back ?>)"><img title="返回" class="topImage" src="icon/return.png"></a>
</div>
<table id="inputTable" width="40%" border="1" cellpadding="5" cellspacing="0" bgcolor="#d3d3d3">
<tr id="createFile" style="display:none" >
<form action="index.php" method="post">
<td>请输入文件名称</td>
<td>
<input type="text" name="filename">
<input type="hidden" name="act" value="createFile">
<input type="hidden" name="path" value="<?= $path?>">
<input type="submit" value="创建文件">
</td>
</form>
</tr>
<tr id="createDir" style="display:none">
<form action="index.php" method="post">
<td>请输入文件夹名称</td>
<td>
<input type="text" name="dirname">
<input type="hidden" name="act" value="createDir">
<input type="hidden" name="path" value="<?= $path?>">
<input type="submit" value="创建文件夹">
</td>
</form>
</tr>
<tr id="uploadFile" style="display:none" >
<form action="index.php" method="post" enctype="multipart/form-data">
<td>请选择文件</td>
<td>
<input type="file" name="myFile">
<input type="hidden" name="act" value="uploadFile">
<input type="hidden" name="path" value="<?= $path?>">
<input type="submit" value="上传">
</td>
</form>
</tr>
</table>
<table width="100%" align="center" border="1" cellpadding="5" cellspacing="0" bgcolor="white">
<tr bgcolor="#808080">
<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 (isset($info['file'])) {
$i = 1;
foreach ($info['file'] as $v) {
$p = $path.'/'.$v;
?>
<tr>
<td><?= $i?></td>
<td><?= $v?></td>
<td><?php $filetype = filetype($p)?><img class="image" src="icon/<?= $filetype?>.png"></td>
<td><?= getFileSize(filesize($p))?></td>
<td><?php $isReadable = is_readable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isReadable?>.png"></td>
<td><?php $isWritable = is_writable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isWritable?>.png"></td>
<td><?php $isExecutable = is_executable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isExecutable?>.png"></td>
<td><?= date("Y-m-d H:i:s",filectime($p)) ?></td>
<td><?= date("Y-m-d H:i:s",filemtime($p)) ?></td>
<td><?= date("Y-m-d H:i:s",fileatime($p)) ?></td>
<td>
<a href="index.php?act=showContent&filename=<?= $p?>&path=<?= $path?>"><img title="查看" class="image" src="icon/see.png"></a>
<a href="index.php?act=editContent&filename=<?= $p?>&path=<?= $path?>"><img title="编辑" class="image" src="icon/edit.png"></a>
<a href="index.php?act=renameContent&filename=<?= $p?>&path=<?= $path?>"><img title="重命名" class="image" src="icon/rename.png"></a>
<a href="index.php?act=copeContent&filename=<?= $p?>&path=<?= $path?>"><img title="复制" class="image" src="icon/copy.png"></a>
<a href="index.php?act=cutContent&filename=<?= $p?>&path=<?= $path?>"><img title="剪切" class="image" src="icon/shear.png"></a>
<a href="index.php?act=delContent&filename=<?= $p?>&path=<?= $path?>"><img title="删除" class="image" src="icon/delete.png"></a>
<a href="index.php?act=downContent&filename=<?= $p?>"><img title="下载" class="image" src="icon/download.png"></a>
</td>
</tr>
<?php
$i++;
}
}
?>
<?php
if (isset($info['dir'])) {
foreach ($info['dir'] as $v) {
$p = $path.'/'.$v;
?>
<tr>
<td><?= isset($i) ? $i :1?></td>
<td><?= $v?></td>
<td><?php $filetype = filetype($p)?><img class="image" src="icon/<?= $filetype?>.png"></td>
<td><?php $dirSum = 0; echo getFileSize(dirSize($p)) //遍历时清空全局变量,防止累加?></td>
<td><?php $isReadable = is_readable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isReadable?>.png"></td>
<td><?php $isWritable = is_writable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isWritable?>.png"></td>
<td><?php $isExecutable = is_executable($p) ? 'allow' : 'prohibit' ?><img class="image" src="icon/<?= $isExecutable?>.png"></td>
<td><?= date("Y-m-d H:i:s",filectime($p)) ?></td>
<td><?= date("Y-m-d H:i:s",filemtime($p)) ?></td>
<td><?= date("Y-m-d H:i:s",fileatime($p)) ?></td>
<td>
<a href="index.php?path=<?= $p?>"><img title="查看" class="image" src="icon/see.png"></a>
<a href="index.php?act=copyDir&path=<?= $path?>&dirname=<?= $p?>"><img title="复制" class="image" src="icon/copy.png"></a>
<a href="index.php?act=renameDir&path=<?= $path?>&dirname=<?= $p?>"><img title="重命名" class="image" src="icon/rename.png"></a>
<a href="index.php?act=cutDir&path=<?= $path?>&dirname=<?= $p?>"><img title="剪切" class="image" src="icon/shear.png"></a>
<a href="index.php?act=delDir&path=<?= $path?>&dirname=<?= $p?>"><img title="删除" class="image" src="icon/delete.png"></a>
</td>
</tr>
<?php
@$i++;
}
}
?>
</table>
</body>
</html>
<script type="text/javascript">
//展示隐藏的输入框
function showFile(dis) {
document.getElementById(dis).style.display = "block";
}
//删除文件(有问题的会出发showFile())
function delfile() {
alert('112');
if(window.confirm('确定删除')){
location.href="index.php?act=delContent&filename="+filename
}
}
function back(back) {
location.href ="index.php?path="+back;
}
</script>
<?php
/**
* Created by PhpStorm.
* User: shanxiongtao
* Date: 2019/12/3
* Time: 20:27
*/
/**
* 封装函数打开指定目录
* @param $path
* @return array
*/
function readDirectory($path){
$handle = opendir($path);
// print_r($handle);die;
$arr = [];
while (($item = readdir($handle)) !== false){
if($item != '.' && $item != '..'){
if(is_file($path.'/'.$item)){
$arr['file'][] = $item;
}
if(is_dir($path.'/'.$item)){
$arr['dir'][] = $item;
}
}
}
closedir($handle);
return $arr;
}
/**
* 递归获取文件夹大小
* @param $path
* @return array
*/
function dirSize($path){
global $dirSum;//定义全局变量
$handle = opendir($path);
while (($item = readdir($handle)) !== false){
if($item != '.' && $item != '..'){
if(is_file($path.'/'.$item)){
$dirSum += filesize($path.'/'.$item);//求和文件大小
}
if(is_dir($path.'/'.$item)){//如果文件夹继续求和
dirSize($path.'/'.$item);
}
}
}
closedir($handle);
return $dirSum;
}
/**
* 求文件大小 Bytes/KB/MB/GB/TB
* @param $size
* @return string
*/
function getFileSize($size){
$arr = ['b','Kb','Mb','Gb','Tb'];
$i = 0;
while ($size >= 1024){
$size /= 1024;
$i++;
}
return round($size,2).$arr[$i];
}
/**
* 创建文件
* @param $fileName
* @return string
*/
function createFile($fileName)
{
$checkName = checkName($fileName);
if ($checkName['code'] == 0) {
if (touch($fileName)) {
return $fileName . "文件创建成功";
} else {
return $fileName . "文件创建失败";
}
} else {
return $checkName['msg'];
}
}
/**
* 检测名称
* @param $fileName
* @return bool|string
*/
function checkName($fileName){
$return = ['code' => 0, 'msg' => 'success'];
if(empty($fileName)){
return $return = [
'code' => 1,
'msg' => "文件名称不可为空"
];
}
//验证文件名称的合法性
$pattern = "/[\/,\*,<>,\?\|]/";
if (preg_match($pattern, basename($fileName))) {
return $return = [
'code' => 1,
'msg' => $fileName . "文件名称不合法"
];
}
//检测当前目录是否存在同名文件
if(file_exists($fileName)){
return $return = [
'code' => 1,
'msg' => $fileName . "文件已经存在"
];
}
return $return;
}
/**
* 检测文件夹名称
* @param $dst
* @return array
*/
function checkDirName($dst){
$return = ['code' => 0, 'msg' => 'success'];
if(!file_exists($dst)){
return $return = [
'code' => 1,
'msg' => "目标文件夹不存在"
];
}
if(!is_dir($dst)){
return $return = [
'code' => 1,
'msg' => "目标不是文件夹"
];
}
return $return;
}
/**
* 提示和跳转函数
* @param $mes
* @param string $url
*/
function alertMeg($mes, $url = 'index.php')
{
echo "<script>alert('{$mes}');location.href='$url';</script>";
}
/**
* 下载文件
* @param $fileName
*/
function downFile($fileName){
header("content-disposition:attachment;filename=".basename($fileName));
header("content-length:".filesize($fileName));
readfile($fileName);
}
/**
* 创建文件夹
* @param $dirname
* @return string
*/
function createDir($dirname)
{
$checkName = checkName($dirname);
if ($checkName['code'] == 0) {
if (mkdir($dirname,0777,true)) {
return $dirname . "创建成功";
} else {
return $dirname . "创建失败";
}
} else {
return $checkName['msg'];
}
}
/**
* 复制文件夹
* @param $path
* @return array
*/
function copyDir($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)){//如果文件夹继续
copyDir($src.'/'.$item,$dst.'/'.$item);
}
}
}
closedir($handle);
return "复制成功";
}
/**
* 剪切文件夹
* @param $src
* @param $dst
* @return string
*/
function cutDir($src,$dst){
$checkDirName = checkDirName($dst);
if($checkDirName['code'] == 1){
return $checkDirName['msg'];
}
if(file_exists($dst.'/'.basename($src))){
return '存在同名文件夹';
}
if(rename($src,$dst.'/'.basename($src))){
return '剪切成功';
}else{
return '剪切失败';
}
}
/**
* 删除文件夹
* @param $path
* @return string
*/
function delDir($path){
// return $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)){//如果文件夹继续
delDir($path.'/'.$item);
}
}
}
closedir($handle);
rmdir($path);
return "删除成功";
}
/**
* 复制文件
* 文件名称 $filename
* 要复制的路径 $dst
* @return mixed|string
*/
function copFile($filename,$dst){
$checkDirName = checkDirName($dst);
if($checkDirName['code'] == 1){
return $checkDirName['msg'];
}
if(file_exists($dst.'/'.basename($filename))){
return '存在同名文件';
}
if(copy($filename,$dst.'/'.basename($filename))){
return '复制成功';
}else{
return '复制失败';
}
}
/**
* 剪切文件
* 文件名称 $filename
* 要复制的路径 $dst
* @return mixed|string
*/
function cutFile($filename,$dst){
$checkDirName = checkDirName($dst);
if($checkDirName['code'] == 1){
return $checkDirName['msg'];
}
if(file_exists($dst.'/'.basename($filename))){
return '存在同名文件';
}
if(rename($filename,$dst.'/'.basename($filename))){
return '剪切成功';
}else{
return '剪切失败';
}
}
/**
* 上传文件
* @param $myFile
* @param $path
* @return mixed|string
*/
function uploadFile($myFile,$path){
$allowEXT = ['gif','jpg','png','txt','doc','docx'];
$maxSize = 10485760; //10M
//检测上传路径合法性
$checkDirName = checkDirName($path);
if($checkDirName['code'] == 1){
return $checkDirName['msg'];
}
if($myFile['error'] != 0){
switch ($myFile['error']){
case 1:
$msg = '上传的文件超过了配置大小';break;
case 2:
$msg = '上传文件的大小超过表单限制';break;
case 3:
$msg = '文件只有部分被上传';break;
case 4:
$msg = '没有文件被上传';break;
case 6:
$msg = '找不到临时文件夹';break;
case 7:
$msg = '文件写入失败';break;
}
return $msg;
}
if(!is_uploaded_file($myFile['tmp_name'])){
return '不是通过http的POST方式上传';
}
if(!in_array(getExt($myFile['name']),$allowEXT)){
return '上传文件类型不合法';
}
if($myFile['size'] >= $maxSize){
return '上传文件过大';
}
$fileName = pathinfo($myFile['name'],PATHINFO_FILENAME);
$fileExt = getExt($myFile['name']);
$destination = $path.'/'.$fileName.'_'.getUnique().'.'.$fileExt;
if(move_uploaded_file($myFile['tmp_name'],$destination)){//
return '上传成功';
}else{
return '上传失败';
}
}
/**
* 获取文件的扩展名
* @param $filename
* @return string
*/
function getExt($filename){
if(empty($filename)){
return '';
}
return strtolower(pathinfo($filename,PATHINFO_EXTENSION));
}
/**
* 获取唯一值
* 长度 $len
* @return bool|string
*/
function getUnique($len = 10){
return substr(md5(uniqid(microtime(true),true)),0,$len);
}
300

被折叠的 条评论
为什么被折叠?



