8

我正在尝试使用 php 脚本从目录中删除所有文本文件。

这是我尝试过的......

<?php array_map('unlink', glob("/paste/*.txt")); ?>

当我运行它时,我没有收到错误,但它没有完成这项工作。

有这个片段吗?我不知道还能尝试什么。

4

5 回答 5

26

您的实施工作您需要做的就是使用Use full PATH

例子

$fullPath = __DIR__ . "/test/" ;
array_map('unlink', glob( "$fullPath*.log"))
于 2012-10-13T03:15:35.067 回答
3

我稍微扩展了提交的答案,以便您可以灵活地递归地取消链接位于下方的文本文件,因为这通常是这种情况。

// @param  string  Target directory
// @param  string  Target file extension
// @return boolean True on success, False on failure

function unlink_recursive($dir_name, $ext) {

    // Exit if there's no such directory
    if (!file_exists($dir_name)) {
        return false;
    }

    // Open the target directory
    $dir_handle = dir($dir_name);

    // Take entries in the directory one at a time
    while (false !== ($entry = $dir_handle->read())) {

        if ($entry == '.' || $entry == '..') {
            continue;
        }

        $abs_name = "$dir_name/$entry";

        if (is_file($abs_name) && preg_match("/^.+\.$ext$/", $entry)) {
            if (unlink($abs_name)) {
                continue;
            }
            return false;
        }

        // Recurse on the children if the current entry happens to be a "directory"
        if (is_dir($abs_name) || is_link($abs_name)) {
            unlink_recursive($abs_name, $ext);
        }

    }

    $dir_handle->close();
    return true;

}
于 2012-10-13T09:35:40.863 回答
1

您可以修改下面的方法,但要小心。确保您有权删除文件。如果一切都失败了,发送一个 exec 命令并让 linux 去做

static function getFiles($directory) {
    $looper = new RecursiveDirectoryIterator($directory);
    foreach (new RecursiveIteratorIterator($looper) as $filename => $cur) {
        $ext = trim($cur->getExtension());
        if($ext=="txt"){
           // remove file: 
        }
    }
    return $out;
}
于 2012-10-13T03:23:12.370 回答
1

我修改了提交的答案并制作了自己的版本,

我在其中创建了将在当前目录及其所有子级目录中递归迭代的函数,

并且它将取消所有带有扩展名的文件.txt.[extension]您想要从所有目录、子目录及其所有子级目录中删除的任何文件的链接。

我用过: glob()来自 php 文档:

glob() 函数根据 libc glob() 函数使用的规则搜索所有匹配模式的路径名,这类似于普通 shell 使用的规则。

我使用GLOB_ONLYDIR了标志,因为它只会遍历目录,因此只获取目录并从该目录取消链接所需的文件会更容易。

<?php

//extension of files you want to remove.
$remove_ext = 'txt';
//remove desired extension files in current directory
array_map('unlink', glob("./*.$remove_ext"));

// below function will remove desired extensions files from all the directories recursively.
function removeRecursive($directory, $ext) {

    array_map('unlink', glob("$directory/*.$ext"));

    foreach (glob("$directory/*",GLOB_ONLYDIR) as $dir) {
            removeRecursive($dir, $ext);
    }
    return true;
}

//traverse through all the directories in current directory 
foreach (glob('./*',GLOB_ONLYDIR) as $dir) {
    removeRecursive($dir, $remove_ext);
}

?>
于 2019-05-15T13:28:02.947 回答
1

对于任何想知道如何删除的人(例如:公共目录下的所有 PDF 文件),您可以这样做:

array_map('unlink', glob( public_path('*.pdf')));
于 2020-08-29T10:26:18.893 回答