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

如何使用PHP从目录中删除所有.txt文件,php,unlink,Php,Unlink,我正在尝试使用php脚本从目录中删除所有文本文件 这是我试过的 <?php array_map('unlink', glob("/paste/*.txt")); ?> 当我运行这个程序时,我没有收到错误,但是它不起作用 有没有这方面的片段?我不确定还可以尝试什么。您的实现可以正常运行您需要做的就是使用使用完整路径 范例 $fullPath = __DIR__ . "/test/" ; array_map('unlink', glob( "$fullPath*.log")) 您

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

这是我试过的

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

当我运行这个程序时,我没有收到错误,但是它不起作用


有没有这方面的片段?我不确定还可以尝试什么。

您的实现可以正常运行您需要做的就是使用
使用完整路径

范例

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

您可以修改下面的方法,但要小心。确保您有删除文件的权限。如果所有这些都失败了,发送一个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;
}

我对提交的答案进行了一点扩展,这样您就可以灵活地递归地取消位于下面的文本文件的链接,通常情况下就是这样

// @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;

}

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

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

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

我使用了: 从php文档:

函数的作用是:搜索与模式匹配的所有路径名 根据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);
}

?>

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

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

没有错误,我在上面说过。路径
/paste/*.txt
正确吗?粘贴目录在
/
Baba帮助下,我没有使用完整路径,我必须输入lude/home/user/etc。。。我现在明白了,必须等着接受他的回答。你应该知道你在使用完整路径,问题是你使用了错误的完整路径。任何以
/
开头的路径都是完整路径。谢谢,伙计,我不知道问题出在哪里,谢谢你帮我澄清。