2015-01-26 120 views
-1

我想爲我的生活中尋找到刪除排除單個文件擴展名的一個目錄中的所有文件的最佳方式,即任何不.zipPHP刪除所有文件從一個目錄 - 排除文件擴展名

到目前爲止,我當前使用的方法,成功地刪除所有文件是:

$files = glob('./output/*'); 
foreach($files as $file) 
{ 
    if(is_file($file)) 
    unlink($file); // delete file 
} 

我試圖修改此像這樣:

$files = glob('./output/**.{!zip}', GLOB_BRACE); 
foreach($files as $file) 
{ 
    if(is_file($file)) 
    unlink($file); // delete file 
} 

Howeve r,我沒有達到預期的結果。我已經改變了下面的行,它只刪除了zip文件本身(所以我可以做相反的所需)​​。

$files = glob('./output/*.{zip}', GLOB_BRACE); 

據我所知,還有其他的方法來讀取目錄內容和使用strpos/preg_match等相應刪除。我也看到了很多其他的方法,但是這些方法看起來很長,或者用於遞歸目錄循環。

我當然沒有與​​3210結婚,我只是想知道刪除單個目錄中不是.zip文件的所有文件的最簡單/最有效的方法。

任何幫助/建議表示讚賞。

回答

2

這應該爲你工作:

(我只是用array_diff()讓這對*.zip不同的所有文件,然後我去通過這些文件,並取消它們的鏈接)

<?php 

    $files = array_diff(glob("*.*"), glob("*.zip")); 
    foreach($files as $file) { 
     if(is_file($file)) 
     unlink($file); // delete file 
    } 

?> 
+0

非常感謝,這似乎是我的問題 – 2015-01-26 19:48:13

+0

@TheHumbleRat不客氣最簡單的解決方案!有一個愉快的一天:D – Rizier123 2015-01-26 19:48:32

3
$exclude = array("zip"); 
$files = glob("output/*"); 
foreach($files as $file) { 
    $extension = pathinfo($file, PATHINFO_EXTENSION); 
    if(!in_array($extension, $exclude)) unlink($file); 
} 

這代碼通過排除擴展數組來工作,它加載目錄中的所有文件,然後檢查每個文件的擴展名。如果擴展名在排除列表中,則不會被刪除。否則,它的確如此。

+0

我將不得不將這個存儲以備後用。非常感謝您的輸入和我理解/欣賞使用'PATHINFO_EXTENSION' – 2015-01-26 19:50:03

0

你有沒有嘗試過這樣的:

$path = "dir/"; 
$dir = dir($path); 
while ($file = $dir->read()) { 
    if ($file != "." && $file != ".." && substr($file, -4) !== '.zip') { 
    unlink($file); 
    } 
} 
1

如何調用的殼呢?所以,在Linux中:

$path = '/path/to/dir/'; 
$shell_command = escapeshellcmd('find ' . $path .' ! -name "*.zip" -exec rm -r {}'); 
$output = shell_exec($shell_command); 
+0

感謝您的輸入邁克,我明白殼是王,但我試圖找到一個PHP唯一的解決方案。該項目由Windows上的xampp提供,ouch。 – 2015-01-26 19:31:13

1

我只是想知道最簡單/最有效的方式來刪除一個目錄不在一個.zip文件中的所有文件。

SPL Iterators非常有效和高效。

這是我會用什麼:

$folder = __DIR__; 
$it = new FilesystemIterator($folder, FilesystemIterator::SKIP_DOTS); 

foreach ($it as $file) { 
    if ($file->getExtension() !== 'zip') { 
     unlink($file->getFilename()); 
    } 
} 
+1

我在搜索時看到了一些關於此的內容,但之前我沒有用過它們。我需要記下這一點,並給它一個測試,非常感謝您的建議 – 2015-01-27 08:56:20

+0

不客氣。 SPL庫在PHP手冊中沒有很好的記錄,所以請嘗試其他來源。這是一個很好的網站http://www.sitepoint.com/using-spl-iterators-1/祝你好運! :) – flangofas 2015-01-27 09:10:56

+0

如果您發現SPL庫有用,那麼請查看這本書,這是迄今爲止發現的SPL的最佳文檔。 http://www.phparch.com/books/mastering-the-spl-library/ – flangofas 2015-01-27 09:14:01