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