少将博客

实战、分享、共成长

Linux虚拟主机空间文件或文件夹无法删除的解决办法


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

附件[ematt:55]

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

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

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

?php
/*
 Linux 空间文件删除器
 作者:whatled.com
 版本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请确定填写无误后再进行删除操作!/bbr
请输入文件夹路径,多个文件夹请使用";"隔开
input type="text" name="all_folder" size="50"
input type="submit" value="删除"
/form
br
form action="?action=filedel" method="post"
删除文件,b请确定填写无误后再进行删除操作!/bbr
请输入完整的文件路径,多个文件请使用";"隔开
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


0条评论

发表评论