今天維護博客文件的時候發現通過FTP無法刪除網站路徑中的一些文件夾和文件.FTP提示Permission Denied(沒有權限)讓我百思不得其解.本著自己研究的出發的想法開始尋找解決辦法,既然FTP提示權限不足那麼應該是服務器的文件權限設置裡出現的問題,我到服務器管理後台查看文件管理器,文件管理器顯示如下圖:
![附件[ematt:55]](https://www.windows5.online/windows/UploadFiles_8258/201702/2017020714391543.png)
由圖中可見,由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請確定填寫無誤後再進行刪除操作!/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