如何使用PHP从目录中删除所有.txt文件

时间:2012-10-13 03:13:25

标签: php unlink

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

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

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

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

这是否有一个片段?我不知道还有什么可以尝试。

5 个答案:

答案 0 :(得分:17)

您的实施工作只需使用Use full PATH

即可

示例

$fullPath = __DIR__ . "/test/" ;
array_map('unlink', glob( "$fullPath*.log"))

答案 1 :(得分: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;

}

答案 2 :(得分: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;
}

答案 3 :(得分:0)

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

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

,它将取消链接所有扩展名为.txt或您要从所有目录,子目录及其所有子级目录中删除的.[extension]的文件。

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

  

glob()函数搜索所有与模式匹配的路径名   根据libc glob()函数使用的规则,即   与普通炮弹使用的规则相似。

我使用了 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);
}

?>

答案 4 :(得分:0)

对于想知道如何删除的人(例如:公共目录下的所有PDF文件),您可以执行以下操作:

array_map('unlink', glob( public_path('*.pdf')));