我正在尝试创建一个php脚本,它将搜索我网站中的特定路径并删除一系列旧的和未使用过的图像。
它们可以以.jpg
,.jpeg
,.gif
,.png
结尾,还有一些.webp
附加到我刚才提到的那些上。
图像的格式通常以:-xxxx-xxxx-.extension
结尾,例如:
以下正则表达式可以正确地检测到它们:
^(.+[0-9]+.[0-9]+\.(png|gif|jpe?g)\.?(webp)?)$
我尝试了以下内容,但由于某种原因,它没有做任何事情:
<?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/
包含多个包含图片的文件夹,下面是一些示例:
/home/HOSTACC/public_html/fx/upd/y-icon-sprite-213x300.png
/home/HOSTACC/public_html/fx/upd/01/desx-yopy-small-150x150.png
/home/HOSTACC/public_html/fx/upd/old/maximumload-web-1920x1920.png
/home/HOSTACC/public_html/fx/upd/old/maximumload-web-1920x1920.png.webp
/home/HOSTACC/public_html/fx/upd/ex/new/old-storage-720x500.png
<?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
答案 0 :(得分:1)
您的正则表达式中似乎嵌入了非打印控制字符。将代码从此处复制并粘贴到3v4l.org shows:
Warning: preg_match(): Unknown modifier '�' in /in/pXQUE on line 4
我已手动重新加密它,现在它works:
FOUND:videos_background-150x150.png
我建议您在源代码中重新加密,或者从3v4l复制我的。