Linux虚拟主机空间文件或文件夹无法删除的解决办法 [疑难杂症]

post by 朦朧中的罪惡 / 2007-12-31 21:01 Monday

今天维护博客文件的时候发现通过FTP无法删除网站路径中的一些文件夹和文件.FTP提示Permission Denied(没有权限)让我百思不得其解.本着自己研究的出发的想法开始寻找解决办法,既然FTP提示权限不足那么应该是服务器的文件权限设置里出现的问题,我到服务器管理后台查看文件管理器,文件管理器显示如下图:

附件[ematt:55]

由图中可见,由PHP程序生成的文件所有者是Apache帐户而不是我的ftp帐户,因此Apache帐户拥有控制这些文件的所有权限但是FTP用户却没有,所以在FTP上我用我自己的用户去操作删除这些文件系统就会提示我没有权限删除它们.

为了确定问题是这样我又去咨询了服务器提供商,得到的答复完全证明对了我的推断:一般国内的Linux虚拟主机上Apache和ftp通常不是在一个用户组,所以apache建立的目录或文件ftp是无法删除的,必须用php程序通过Apache来删除。

那怎么解决呢?很简单,写个PHP程序来完成这个工作

<?php
/*
 Linux 空间文件删除器
 作者:朦朧中的罪惡
 版本1.0
 版权:自由软件,随意传播
 ####警告####
 本软件为空间维护工具,使用完毕之后请立即删除本文件
*/
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<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" name="all_folder" size="50">
<input type="submit" value="删除">
</form>
<br>
<form action="?action=filedel" method="post">
删除文件,<b>请确定填写无误后再进行删除操作!</b><br>
请输入完整的文件路径,多个文件请使用";"隔开
<input type="text" name="all_files" 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.rar 1.34KB

标签: apache 原创

« JavaScript在IE下设置innerHTML时出现"未知的运行时错误" | ASP运行出现HTTP/1.1 500 Server Error»

引用:

评论

  1. zero Says:

    帮上大忙了~~

    PS:
    我说怎么看着朦朧中的罪惡很眼熟
    果然也是用EMLOG的~~

  2. 杜红涛 Says:

    非常感谢楼主!!谢谢!

  3. 文博 Says:

    谢谢

  4. 荒野无灯 Says:

    谢谢,按你的方法,我成功删除由apache创建的文件夹

  5. trsit Says:

    谢谢你,这个工具解决了我的麻烦,那个设计不太好的宏博cms,安装之后就会产生这个问题,

    博主回复:不客气:)

  6. zhao Says:

    谢谢,帮了我

    博主回复:不客气!:)

发表评论