PHP 从 Linux 目录中删除点文件的脚本
PHP script to remove dot files from Linux directory
我一直在做一个项目,涉及到一个步骤,期间脚本需要自动删除Linux中的某个目录(及其所有内容)。
我目前正在使用以下代码来执行此操作:
# Perform a recursive removal of the obsolete folder
$dir_to_erase = $_SESSION['path'];
function removeDirectory($dir_to_erase) {
$files = glob($dir_to_erase . '/*');
foreach ($files as $file) {
is_dir($file) ? removeDirectory($file) : unlink($file);
}
rmdir($dir_to_erase);
return;
}
其中 $_SESSION['path']
是要删除的文件夹。一直工作得很好,但我最近不得不向文件夹添加一个 .htaccess 文件,我注意到脚本停止正常工作(它一直在删除其余文件,但不是 .htaccess 文件)。
谁能指出我应该添加到代码中的内容,包括删除过程中的隐藏点文件?
根据这个答案:
PHP glob() doesnt find .htaccess
glob(".*")
会找到 .htaccess
您还可以稍微修改您的函数以删除隐藏文件:
function removeDirectory($dir)
{
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (is_dir($dir."/".$object))
removeDirectory($dir."/".$object);
else
unlink($dir."/".$object);
}
}
rmdir($dir);
}
}
简单来说,可以靠DirectoryIterator
The DirectoryIterator class provides a simple interface for viewing
the contents of filesystem directories.
function removeDirectory($dir_to_erase) {
$files = new DirectoryIterator($dir_to_erase);
foreach ($files as $file) {
// check if not . or ..
if (!$file->isDot()) {
$file->isDir() ? removeDirectory($file->getPathname()) : unlink($file->getPathname());
}
}
rmdir($dir_to_erase);
return;
}
您可以使用其中的许多功能,因为检查所有者非常有用,可确保不删除关键文件。
我一直在做一个项目,涉及到一个步骤,期间脚本需要自动删除Linux中的某个目录(及其所有内容)。
我目前正在使用以下代码来执行此操作:
# Perform a recursive removal of the obsolete folder
$dir_to_erase = $_SESSION['path'];
function removeDirectory($dir_to_erase) {
$files = glob($dir_to_erase . '/*');
foreach ($files as $file) {
is_dir($file) ? removeDirectory($file) : unlink($file);
}
rmdir($dir_to_erase);
return;
}
其中 $_SESSION['path']
是要删除的文件夹。一直工作得很好,但我最近不得不向文件夹添加一个 .htaccess 文件,我注意到脚本停止正常工作(它一直在删除其余文件,但不是 .htaccess 文件)。
谁能指出我应该添加到代码中的内容,包括删除过程中的隐藏点文件?
根据这个答案:
PHP glob() doesnt find .htaccess
glob(".*")
会找到 .htaccess
您还可以稍微修改您的函数以删除隐藏文件:
function removeDirectory($dir)
{
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (is_dir($dir."/".$object))
removeDirectory($dir."/".$object);
else
unlink($dir."/".$object);
}
}
rmdir($dir);
}
}
简单来说,可以靠DirectoryIterator
The DirectoryIterator class provides a simple interface for viewing the contents of filesystem directories.
function removeDirectory($dir_to_erase) {
$files = new DirectoryIterator($dir_to_erase);
foreach ($files as $file) {
// check if not . or ..
if (!$file->isDot()) {
$file->isDir() ? removeDirectory($file->getPathname()) : unlink($file->getPathname());
}
}
rmdir($dir_to_erase);
return;
}
您可以使用其中的许多功能,因为检查所有者非常有用,可确保不删除关键文件。