[英]PHP Remove all Files From a Directory - Exclude File Extension
我一直在努力尋找刪除單個目錄中除單個文件擴展名(即不是.zip
任何文件)中所有文件的最佳方法
到目前為止,我目前使用的成功刪除所有文件的方法是:
$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
}
但是,我沒有達到預期的結果。 我更改了以下行,僅刪除了zip文件本身(因此,可以執行所需的操作)。
$files = glob('./output/*.{zip}', GLOB_BRACE);
我了解還有其他方法可以讀取目錄內容並使用strpos
/ preg_match
等進行相應刪除。 我也看到了許多其他方法,但是這些方法似乎很麻煩,或者打算用於遞歸目錄循環。
我當然不嫁給glob()
,我只是想知道刪除單個目錄中不是.zip
文件的所有文件的最簡單/最有效的方法。
任何幫助/建議表示贊賞。
$exclude = array("zip");
$files = glob("output/*");
foreach($files as $file) {
$extension = pathinfo($file, PATHINFO_EXTENSION);
if(!in_array($extension, $exclude)) unlink($file);
}
該代碼通過具有一組排除的擴展名來工作,將所有文件加載到目錄中,然后檢查每個文件的擴展名。 如果擴展名在排除列表中,則不會被刪除。 否則,確實如此。
這應該為您工作:
(我只是使用array_diff()
來獲取與*.zip
不同的所有文件,然后瀏覽這些文件並取消鏈接)
<?php
$files = array_diff(glob("*.*"), glob("*.zip"));
foreach($files as $file) {
if(is_file($file))
unlink($file); // delete file
}
?>
調用外殼怎么樣? 因此在Linux中:
$path = '/path/to/dir/';
$shell_command = escapeshellcmd('find ' . $path .' ! -name "*.zip" -exec rm -r {}');
$output = shell_exec($shell_command);
我僅想知道刪除單個目錄中不是.zip文件的所有文件的最簡單/最有效的方法。
SPL迭代器非常有效。
這就是我要使用的:
$folder = __DIR__;
$it = new FilesystemIterator($folder, FilesystemIterator::SKIP_DOTS);
foreach ($it as $file) {
if ($file->getExtension() !== 'zip') {
unlink($file->getFilename());
}
}
您是否嘗試過:
$path = "dir/";
$dir = dir($path);
while ($file = $dir->read()) {
if ($file != "." && $file != ".." && substr($file, -4) !== '.zip') {
unlink($file);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.