PHP 取消链接以通过正则表达式删除旧图像

PHP Unlink to remove old images via regex

我正在尝试制作一个 php 脚本来搜索我网站中的特定路径并删除一系列旧的和未使用的图像。

它们可以以 .jpg.jpeg.gif.png 结尾,有些还在我刚才的那些后面附加了 .webp提到。

图片格式通常以:-xxxx-xxxx-.extension结尾 例如:

据我所知,以下正则表达式可以正确检测到它们:

我尝试了以下方法,但由于某种原因它没有做任何事情:

<?php
    $glob = glob('/home/HOSTACC/public_html/fx/upd/*');
    foreach($glob as $file) {
        if(preg_match('^(.+[0-9]+.[0-9]+\.(png|gif|jpe?g)\.?(webp)?)$', $file)) {
            unlink($file);
        }
    }
?>

我的目录/home/HOSTACC/public_html/fx/upd/包含多个文件夹,里面有图片,下面是一些例子:

递归:

<?php
    echo "<pre>";

    function rsearch($folder, $pattern_array) {
        $return = array();
        $iti = new RecursiveDirectoryIterator($folder);
        foreach(new RecursiveIteratorIterator($iti) as $file){
            if (in_array(strtolower(array_pop(explode('.', $file))), $pattern_array)){
                $return[] = $file;
            }
        }
        return $return;
    }
    $filepaths = rsearch('/home/HOSTACC/public_html/fx/upd/', array('jpeg', 'jpg', 'jpeg', 'png', 'gif', 'webp') );

    foreach($filepaths as $file) {
        /* The following line prints the correct paths*/
        $filename = $file->getFilename();
        $filepath = $file->__toString();
        $filenamenew = end((explode('/', $filepath)));
        echo var_dump($filename);
        echo var_dump($filenamenew);
        echo var_dump($filepath);
        if(preg_match('/^(.+[0-9]+.[0-9]+\.(png|gif|jpe?g)\.?(webp)?)$/‌​', $filename)) {
            /*unlink($file);*/
            echo "FOUND:" . $filepath . PHP_EOL;
        }
        echo PHP_EOL;
    }
?>

输出(短:

string(21) "videos_background.png"
string(21) "videos_background.png"
string(70) "/home/HOSTACCO/public_html/f1/docs/uploads/static/videos_background.png"

string(29) "videos_background-150x150.png"
string(29) "videos_background-150x150.png"
string(78) "/home/HOSTACCO/public_html/f1/docs/uploads/static/videos_background-150x150.png"

唯一的问题是 preg_match 不工作,不确定我做错了什么:https://regex101.com/r/EMrI0N/1

您的正则表达式中似乎嵌入了一个 non-printing 控制字符。将您的代码从此处复制并粘贴到 3v4l.org shows:

Warning: preg_match(): Unknown modifier '�' in /in/pXQUE on line 4

我手动重新输入了密钥,现在 works:

FOUND:videos_background-150x150.png

我建议重新键入您的源代码,或者从 3v4l 复制我的源代码。