php文件管理源代码

作者:袖梨 2022-06-24

/*************************************
*---文件管理
*作者:菜根
*声明:此文件功能参照于phps教程py,
************************************/
 

 代码如下 复制代码

 if(function_exists('date_default_timezone_set'))
 {
  @date_default_timezone_set('asia/shanghai');
 }
 
 define('is_win', directory_separator == '');
 define('is_com', class_exists('com') ? 1 : 0 );
 define('web_root', str_replace('', '/', dirname(__file__)).'/');
 $phpself = htmlspecialchars($_server['php_self'] ? $_server['php_self'] : $_server['script_name']);
 $msg = '';
 
 if(!empty($_post['cwddir']))
 {
  $_post['cwddir'] = addslashes($_post['cwddir']);
   if(is_dir($_post['cwddir']))
    chdir($_post['cwddir']);
 }
 
 $cwddir = getcwddir();//获取当前工作路径
 
 $freespaces = disk_free_space($cwddir);//当前磁盘剩余空间
 $totalspaces = disk_total_space($cwddir);//当前总空间大小
 //header("content-type: text/html; charset=utf-8");
 
 //新建目录
 if($_post['newdirname'])
 {
  $newdir = $_post['dirname'].$_post['newdirname'];
  if(file_exists($newdir))
  {
   $msg = "该目录:$newdir 已存在,请用其它名字";
  }else{
   $msg = "创建$newdir".(@mkdir($newdir,0777) ? '成功' : '失败');
  }
 }
 
 //文件上传
 if($_post['upload'])
 {
  $fname = $_files['upfilename'];
  $msg = fileupload($fname,$_post['todir']);
 }
 
 //更改名称
 if($_post['newname'])
 {
  $newname = addslashes($_post['newname']);
  $oldname = addslashes($_post['oldname']);
  $dirname = addslashes($_post['dirname']);
  $newname = $dirname.$newname;
  if(!file_exists($newname))
  {
   if(rename($oldname,$newname))
   {
    $msg = '更改名称成功';
   }else{
    $msg = '无法更改,请检查相关配置和权限';
   }
  }else{
   $msg = '文件已存在,请更换其它名称!';
  }
 }
 
 //复制文件
 if($_post['tofile'])
 {
  $tofile = addslashes($_post['tofile']);
  $oldname = addslashes($_post['oldname']);
  if(file_exists($tofile))
  {
   $msg = '文件已存在,请更换其它名称!';
  }else{
   if(copy($oldname,$tofile))
   {
    $msg = "复制文件 $oldname 到 $tofile 成功!";
   }else{
    $msg = "复制文件 $oldname 到 $tofile 失败,请检查相关配置和权限!";
   }
  }
 }
 
 //下载文件:源码来自phpspy2008,因为我对header()一窍不通,呵呵
 if($_post['dfile'])
 {
  $thefile = addslashes($_post['dfile']);
  //header("location:$dfile");
  if (!@file_exists($thefile)) {
   $errmsg = 'the file you want downloadable was nonexistent';
  } else {
   $fileinfo = pathinfo($thefile);
   header('content-type: application/x-'.$fileinfo['extension']);
   header('content-disposition: attachment; filename='.$fileinfo['basename']);
   header('content-length: '.filesize($thefile));
   @readfile($thefile);
   exit;
  }
 }
 
 //删除单个文件
 if($_post['delfilename'])
 {
  $delfilename = addslashes($_post['delfilename']);
  if(!file_exists($delfilename))
  {
   $msg = '文件不存在!';
  }else{
   if(unlink($delfilename))
   {
    $msg = '删除'.$delfilename.'成功';
   }else{
    $msg = '删除'.$delfilename.'失败,请检查相关配置和权限';
   }
  }
 }
 
 //删除文件夹
 if($_post['deldirname'])
 {
  $delname = addslashes($_post['deldirname']);
  if(deltree($delname))
   {
    $msg = '删除'.$delname.'成功';
   }else{
    $msg = '删除'.$delname.'失败,请检查相关配置和权限';
   }
 }
 
 //新建文件
 if($_post['createtofile'])
 {
  $createfilename = htmlspecialchars(addslashes($_post['createdirname'].$_post['createtofile']));
  //echo $createfilename;
  if(file_exists($createfilename))
  {
   $msg = '文件已存在!';
   $createfilename = 0;
  }else{
   if($creatfhandle = fopen($createfilename,'w'))
   {
    //echo 'dffdfd';
    fclose($creatfhandle);
   }else {
    $msg = '文件创建失败,请检查相关配置和权限!';
   }
  }
 }
 
 //编辑文件
 if($_post['editfilename'])
 {
  $createfilename = addslashes($_post['editfilename']);
  if(!file_exists($createfilename))
  {
   $msg = '文件不存在!';
   $createfilename = 0;
  }
 }
 
 //保存编辑过的文件
 if($_post['editsubmit'])
 {
  $savefilecontent = htmlspecialchars($_post['fcontent']);
  $savefilename = $_post['editfname'];
  if($fhandle = fopen($savefilename,'wb'))
  {
   if(fwrite($fhandle,$savefilecontent))
   {
    $msg = '编辑成功!';
   }else{
    $msg = '编辑失败!';
   }
   fclose($fhandle);
  }
 }
 
 //修改属性
 if ($_post['newperm'])
 {
  $newperm = $_post['newperm'];
  $pfile = addslashes($_post['pfile']);
  if (!file_exists($pfile))
  {
   $msg = '文件不存在';
  } else {
   $newperm = base_convert($newperm,8,10);
   $msg = '修改文件属性 '.(@chmod($pfile,$newperm) ? '成功' : '失败');
  }
 }

?>




文件管理






  网页特效:godir('');">webroot
  |
  create directory
  |
  create file
    if (is_win && is_com) {
  //此代码来源于phpspy
  $obj = new com('scripting.filesystemobject');
  if ($obj && is_object($obj)) {
   $drivetypedb = array(0 => 'unknow',1 => 'removable',2 => 'fixed',3 => 'network',4 => 'cdrom',5 => 'ram disk');
   foreach($obj->drives as $drive) {
    if ($drive->drivetype == 2) {
     echo(' | '.$drivetypedb[$drive->drivetype].'('.$drive->path.')');
    } else {
     echo(' | '.$drivetypedb[$drive->drivetype].'('.$drive->path.')');
    }
   }
  }
 }
?>
 


 


 

    当前目录: ()
   
   
 



 

    file manager - current disk free of ()
   
   
   
 



 

   
   
 

 
 

   
   
 

 

   
   
   
 

 

   
   
 

 

   
 

 

   
 

 

   
 

 

   
   
 

 

   
 

 

   
   
 

 

 

 
t
 

 

 代码如下 复制代码

if($createfilename)
{
 $filecontent = htmlspecialchars(file_get_contents($createfilename));
 
/*  $handle = fopen($createfilename, "rb");
$filecontent = fread($handle, filesize ($createfilename));
fclose($handle); */


echo <<

 
 
 


eof;

}//if($createfilename)

$dirdata = array();
$filedb = array();
if(is_dir($cwddir))
{
 $dirhandle = opendir($cwddir);
 
 while($files = readdir($dirhandle))
 {
  $filepath = $cwddir.$files;
  if(is_dir($filepath))
  {
   $dirs['filepath'] = $filepath;
   $dirs['filename'] = htmlspecialchars($files);
   $dirs['size'] = '--';
   $dirs['ctime'] = date('y-m-d h:m:s',filectime($filepath));
   $dirs['mtime'] = date('y-m-d h:m:s',filemtime($filepath));
   $dirs['permsnum'] = getpermsnum($filepath);
   $dirs['permschar'] = getpermschar($filepath);
   $dirdata[] = $dirs;
  }else{
   $filedata['filepath'] = $filepath;
   $filedata['url'] = str_replace(web_root,'',$filepath);
   $filedata['filename'] = $files;
   $filedata['size'] = realsize(filesize($filepath));
   $filedata['ctime'] = date('y-m-d h:m:s',filectime($filepath));
   $filedata['mtime'] = date('y-m-d h:m:s',filemtime($filepath));
   $filedata['permsnum'] = getpermsnum($filepath);
   $filedata['permschar'] = getpermschar($filepath);
   $filedb[] = $filedata;
  }
 }
}

?>
 


   
     
       
       
       
       
       
       
       
     
      echo <<  
       
       
       
       
       
       
       
     
eof2;
   foreach($dirdata as $keys => $dirdb)
   {
    if($dirdb['filename'] != '.' && $dirdb['filename'] != '..')
  
echo <<      
       
       
       
       
       
       
       
     
eof;
   }
   ?>
     
       
     
         foreach($filedb as $keys => $fdb)
   {
  
echo <<      
       
       
       
       
       
       
       
     
eof;
   }
   ?>
   
 文件(目录)名称大小创建时间最后修改时间属性操作
 上级目录     
┣ {$dirdb['filename']}{$dirdb['size']}{$dirdb['ctime']}{$dirdb['mtime']}{$dirdb['permsnum']} / {$dirdb['permschar']}del | rename
==============================================================================================================================================
 {$fdb['filename']}{$fdb['size']}{$fdb['ctime']}{$fdb['mtime']}{$fdb['permsnum']} / {$fdb['permschar']}del | rename | copy | down | edit

 




//////////////////函数库//////////////////////////

/*===================获取当前工作目录=================================*/
function getcwddir($cwddir = '')
 {
  $cwddir = $cwddir ? $cwddir : getcwd();
  $cwddir = str_replace('','/',$cwddir);
  //$cwddir = str_replace('','/',$cwddir);
  $cwddir = str_replace('//','/',$cwddir);
  $cwddir = substr($cwddir,-1) == '/' ? $cwddir : $cwddir.'/';
  
  return $cwddir;
 }
 
/*==========转换大小单位==================*/
function realsize($size)
{
 $size = $size ? $size : 0;
 if($size > 1073741824) {
  $size = round($size / 1073741824 , 2) . ' gb';
 } elseif($size > 1048576) {
  $size = round($size / 1048576 , 2) . ' mb';
 } elseif($size > 1024) {
  $size = round($size / 1024 , 2) . ' kb';
 } else {
  $size = $size . ' b';
 }
 return $size;
}

//获取文件属性:来源于php手册
function getpermsnum($path)
{
 return substr(sprintf('%o', fileperms($path)), -4);
}

function getpermschar($path)
{
 $perms = fileperms($path);

 if (($perms & 0xc000) == 0xc000) {
  // socket
  $info = 's';
 } elseif (($perms & 0xa000) == 0xa000) {
  // symbolic link
  $info = 'l';
 } elseif (($perms & 0x8000) == 0x8000) {
  // regular
  $info = '-';
 } elseif (($perms & 0x6000) == 0x6000) {
  // block special
  $info = 'b';
 } elseif (($perms & 0x4000) == 0x4000) {
  // directory
  $info = 'd';
 } elseif (($perms & 0x2000) == 0x2000) {
  // character special
  $info = 'c';
 } elseif (($perms & 0x1000) == 0x1000) {
  // fifo pipe
  $info = 'p';
 } else {
  // unknown
  $info = 'u';
 }
 
 // owner
 $info .= (($perms & 0x0100) ? 'r' : '-');
 $info .= (($perms & 0x0080) ? 'w' : '-');
 $info .= (($perms & 0x0040) ?
    (($perms & 0x0800) ? 's' : 'x' ) :
    (($perms & 0x0800) ? 's' : '-'));
 
 // group
 $info .= (($perms & 0x0020) ? 'r' : '-');
 $info .= (($perms & 0x0010) ? 'w' : '-');
 $info .= (($perms & 0x0008) ?
    (($perms & 0x0400) ? 's' : 'x' ) :
    (($perms & 0x0400) ? 's' : '-'));
 
 // world
 $info .= (($perms & 0x0004) ? 'r' : '-');
 $info .= (($perms & 0x0002) ? 'w' : '-');
 $info .= (($perms & 0x0001) ?
    (($perms & 0x0200) ? 't' : 'x' ) :
    (($perms & 0x0200) ? 't' : '-'));
 
 return $info;

}

function p($str){
 echo $str." ";
}

/*=========文件上传========================*/
function fileupload($fname,$todir)
{
 
 $topath = $todir.$fname['name'];
 if(!fname || !todir)
 {
  return '参数错误!';
 }else{
  if(file_exists($topath) || !is_dir($todir))
  {
   return '上传失败,文件名已存在!';
  }else{
   if(move_uploaded_file($fname['tmp_name'],$topath))
   {
    return '文件上传成功!';
   }else{
    return '文件上传失败,请检查相关配置及相关权限!';
   }
  }
 }
}

/*========递归删除文件夹================*/
/* function deepdeldir($dirpath = '')
{
 $dirhd = opendir($dirpath);
 while($thefile = readdir($dirhd))
 {
  $realfile = $dirpath.'/'.$thefile;
  if(is_dir($readfile) && ($thefile != '.') && ($thefile != '..'))
  {
   deepdeldir($realfile);
  }
  if(is_file($realfile))
  {
   unlink($realfile);
  }
 }
 closedir($dirhd);
 return rmdir($dirpath) ? 1 : 0;
} */
//递归删除文件夹:来源于phpspy,我自己写的不成功,以后再自己写
function deltree($deldir) {
 $mydir=@dir($deldir); 
 while($file=$mydir->read()) {   
  if((is_dir($deldir.'/'.$file)) && ($file!='.') && ($file!='..')) {
   @chmod($deldir.'/'.$file,0777);
   deltree($deldir.'/'.$file);
  }
  if (is_file($deldir.'/'.$file)) {
   @chmod($deldir.'/'.$file,0777);
   @unlink($deldir.'/'.$file);
  }
 }
 $mydir->close();
 @chmod($deldir,0777);
 return @rmdir($deldir) ? 1 : 0;
}

相关文章

精彩推荐