Linux空间中文件或文件夹无法删除的解决办法

我用的是Linux虚拟空间,每当升级论坛或博客程序后,就会有些旧的文件或文件夹异常“顽固”无法删除,不管是FTP工具还是WEB管理工具都没 辙,只得通知客服协助删除一下。不过总这样总归不是个好办法,且很不方便。今天升级UCenter Home后,又出现这个问题!遂试着在网上找找有没有同样的问题及解决方法,果然有。

原来这是文件或文件夹的权限问题:这些所不能被FTP帐户删除的文件或文件夹是由PHP程序生成的(如在上传文件时所生成的目录),所以它们的所有 者是Apache帐户而非Ftp帐户,由于有些Linux虚拟主机上的Apache帐户和Ftp帐户通常不在一个用户组,当然Apache帐户所创建的文 件或文件夹也就无法由Ftp帐户删除或更改了。解决方法就是用Php程序让Apache去删除,Php代码如下:


<?php
/*
  > 源文件来自网络
 ####警告####
 本软件为空间维护工具,使用完毕之后请立即删除本文件
*/
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>空间文件夹/文件删除工具</title>
<style>
body {font-family:"宋体"; font-size:12px;}
imput { border:1px #ccc solid;}
b { color:#FF0000;}
</style>
</head>
<body>
<form action="?action=dirdel" method="post">
删除文件夹,<b>请确定填写无误后再进行删除操作!</b><br>
请输入文件夹路径,多个文件夹请使用";"隔开
<input type="text" size="50">
<input type="submit" value="删除">
</form>
<br>
<form action="?action=filedel" method="post">
删除文件,<b>请确定填写无误后再进行删除操作!</b><br>
请输入完整的文件路径,多个文件请使用";"隔开
<input type="text" size="50">
<input type="submit" value="删除">
</form>
<br>
<?php
$action = $_GET['action'];

//删除目录操作
if($action=='dirdel') {
 $all_folder = $_POST['all_folder'];
 if(!empty($all_folder)) {
  //根据分号识别多个文件夹
  $folders = explode(';',$all_folder);
  if(is_array($folders)) {
   foreach($folders as $folder) {
    deldir($folder);
    echo $folder . '删除成功<Br>';
   }
  }
 }
}

if($action=='filedel') {
 $all_files = $_POST['all_files'];
 if(!empty($all_files)) {
  //根据分号识别多个文件
  $files = explode(';',$all_files);
  if(is_array($files)) {
   foreach($files as $file) {
    if(is_file($file)) {
     if(unlink($file)) {
      echo $file . '删除成功<Br>';
     } else {
      echo $file . '无法删除,请检查权限<Br>';
     }
    } else {
     echo $file . '不存在<br>';
    }
   }
  }
 }
}

//删除目录及所包含文件函数
function deldir($dir) {
 //打开文件目录
 $dh = opendir($dir);
 //循环读取文件
 while ($file = readdir($dh)) {
  if($file != '.' && $file != '..') {
   $fullpath = $dir . '/' . $file;
   //判断是否为目录
   if(!is_dir($fullpath)) {
    //如果不是,删除该文件
    if(!unlink($fullpath)) {
     echo $fullpath . '无法删除,可能是没有权限!<br>';
    }
   } else {
    //如果是目录,递归本身删除下级目录
    deldir($fullpath);
   }
  }
 }
 //关闭目录
 closedir($dh);
 //删除目录
 if(rmdir($dir)) {
  return true;
 } else {
  return false;
 }
}
?>
</body>
</html>

源代码下载:deltool.zip

PS:在使用此工具的时候,首先要确定文件夹是由php程序生成(有Ftp创建的文件夹无法被删除);如果删除 不成功,就要检查你输入的文件夹或文件的路径了,页面中提示的输入完整路径是指相对于此Php工具所在的目录的。如要删除的“abc”文件夹和上传的此 Php工具同时在你站点的根目录,就在删除文件夹的输入框中直接填写“abc”即可,如果要删除的文件夹是在“abc”中的“123”文件夹,则输入 “abc/123/”即可;文件的删除亦如此。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wygyfg.html