我有在他們的某些文件的幾個目錄:如何使用PHP從目錄中刪除除一個以外的所有文件?
/test1/123.jpg
/test1/124.jpg
/test1/125.jpg
/test2/123.jpg
/test2/124.jpg
我想刪除所有除/test1/124.jpg or /test2/124.jpg
?
我知道目錄名和文件名。有沒有辦法在一個Linux環境下使用php,也許unlink
?
我有在他們的某些文件的幾個目錄:如何使用PHP從目錄中刪除除一個以外的所有文件?
/test1/123.jpg
/test1/124.jpg
/test1/125.jpg
/test2/123.jpg
/test2/124.jpg
我想刪除所有除/test1/124.jpg or /test2/124.jpg
?
我知道目錄名和文件名。有沒有辦法在一個Linux環境下使用php,也許unlink
?
你可以試試:
for ($i=1;$i<=2;$i++){
shell_exec ('mv /test'.$i.'/124.jpg /test'.$i.'/keep.jpg');
shell_exec ('rm /test'.$i.'/12*.jpg');
shell_exec ('mv /test'.$i.'/keep.jpg /test'.$i.'/124.jpg');
}
也許有點粗糙,但如果你是一個Linux系統上,你可以這樣做(假設你在正確的目錄裏):
<?php shell_exec('rm $(ls * | grep -v '.$fileYouWantToKeep.')'); ?>
如果包含任何用戶輸入,您顯然需要過濾該變量。
只需編輯$ dir和$ leave_files即可編輯位置和文件。
$dir = 'test1';
$leave_files = array('124.jpg', '123.png');
foreach(glob("$dir/*") as $file) {
if(!in_array(basename($file), $leave_files))
unlink($file);
}
你會爲每個目錄運行一次。
如果目標目錄與此腳本不在同一文件夾中,還請記住要使$ dir成爲完整路徑(不帶結尾斜槓)。
+1爲我介紹'glob()'函數。涼! – NotGaeL 2012-08-10 23:47:31
這當然是一個節省時間。 http://php.net/glob – HappyTimeGopher 2012-08-10 23:48:49
如何爲服務域的根目錄做到這一點?像服務器上的public_html目錄和localhost上的項目文件夾? – coder101 2013-06-22 12:20:19
這裏的另一種選擇:
<?php
$dirList = array('/path/to/dir1','/path/to/dir2'); //List of Dirs with files to be deleted. No trailing slash
$saved = array('path/to/file1','path/to/file2'); //List of files to be saved, no leading slash
foreach($dirList as $directory){
$list = scandir($directory);
foreach($list as $file){
if(!is_int(array_seach($directory.'/'.$file,$saved))){ //Array search returns key if needle exists, so we check if it does not return int
unlink($file);
}
}
}
?>
我沒有訪問到我的服務器,所以我現在還沒有測試,但我認爲它應該工作。首先在一些測試目錄上嘗試一下,看看它是否有效。
你可以將文件移動到一個臨時文件夾,然後擦除文件夾,使一個新的移動文件夾與舊名稱的文件夾,並移回照片,擦除tmp文件夾。 $利潤$
不錯的黑客,我喜歡它,生病讓問題持續一段時間,以獲得更多的反饋 – Patrioticcow 2012-08-10 23:32:20
骯髒的黑客。如果您只能編寫PHP代碼,則不應使用該示例。只有當你明白你在做什麼和爲什麼。 – maectpo 2012-09-19 14:41:52
@maectpo請問您能否給我一個更好的答案?我接受任何形式的建設性批評。 – NotGaeL 2012-09-20 23:24:23