2015-01-26 169 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