PHP 从目录中删除所有文件 - 排除文件扩展名
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()
,我只是想知道 simplest/most 删除单个目录中所有不是 .zip
文件的文件的有效方法。
任何 help/advice 不胜感激。
这应该适合你:
(我只是使用 array_diff()
来获取与 *.zip
不同的所有文件,然后我浏览这些文件并取消链接)
<?php
$files = array_diff(glob("*.*"), glob("*.zip"));
foreach($files as $file) {
if(is_file($file))
unlink($file); // delete file
}
?>
$exclude = array("zip");
$files = glob("output/*");
foreach($files as $file) {
$extension = pathinfo($file, PATHINFO_EXTENSION);
if(!in_array($extension, $exclude)) unlink($file);
}
这段代码的工作原理是拥有一组排除的扩展名,它会加载目录中的所有文件,然后检查每个文件的扩展名。如果扩展名在排除列表中,则它不会被删除。否则,确实如此。
你试过这个吗:
$path = "dir/";
$dir = dir($path);
while ($file = $dir->read()) {
if ($file != "." && $file != ".." && substr($file, -4) !== '.zip') {
unlink($file);
}
}
打电话给 shell 怎么样?所以在 Linux:
$path = '/path/to/dir/';
$shell_command = escapeshellcmd('find ' . $path .' ! -name "*.zip" -exec rm -r {}');
$output = shell_exec($shell_command);
I would simply like to know the simplest/most efficient way to delete all files in a single directory that are not a .zip file.
SPL Iterators 非常有效和高效。
这就是我要使用的:
$folder = __DIR__;
$it = new FilesystemIterator($folder, FilesystemIterator::SKIP_DOTS);
foreach ($it as $file) {
if ($file->getExtension() !== 'zip') {
unlink($file->getFilename());
}
}
我一生都在努力寻找删除单个目录中所有文件的最佳方法,不包括单个文件扩展名,即任何不是 .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()
,我只是想知道 simplest/most 删除单个目录中所有不是 .zip
文件的文件的有效方法。
任何 help/advice 不胜感激。
这应该适合你:
(我只是使用 array_diff()
来获取与 *.zip
不同的所有文件,然后我浏览这些文件并取消链接)
<?php
$files = array_diff(glob("*.*"), glob("*.zip"));
foreach($files as $file) {
if(is_file($file))
unlink($file); // delete file
}
?>
$exclude = array("zip");
$files = glob("output/*");
foreach($files as $file) {
$extension = pathinfo($file, PATHINFO_EXTENSION);
if(!in_array($extension, $exclude)) unlink($file);
}
这段代码的工作原理是拥有一组排除的扩展名,它会加载目录中的所有文件,然后检查每个文件的扩展名。如果扩展名在排除列表中,则它不会被删除。否则,确实如此。
你试过这个吗:
$path = "dir/";
$dir = dir($path);
while ($file = $dir->read()) {
if ($file != "." && $file != ".." && substr($file, -4) !== '.zip') {
unlink($file);
}
}
打电话给 shell 怎么样?所以在 Linux:
$path = '/path/to/dir/';
$shell_command = escapeshellcmd('find ' . $path .' ! -name "*.zip" -exec rm -r {}');
$output = shell_exec($shell_command);
I would simply like to know the simplest/most efficient way to delete all files in a single directory that are not a .zip file.
SPL Iterators 非常有效和高效。
这就是我要使用的:
$folder = __DIR__;
$it = new FilesystemIterator($folder, FilesystemIterator::SKIP_DOTS);
foreach ($it as $file) {
if ($file->getExtension() !== 'zip') {
unlink($file->getFilename());
}
}