PHP 取消链接以通过正则表达式删除旧图像
PHP Unlink to remove old images via regex
我正在尝试制作一个 php 脚本来搜索我网站中的特定路径并删除一系列旧的和未使用的图像。
它们可以以 .jpg
、.jpeg
、.gif
、.png
结尾,有些还在我刚才的那些后面附加了 .webp
提到。
图片格式通常以:-xxxx-xxxx-.extension
结尾 例如:
- 32x32.png.webp
- 50x150.png
- 720x1024.gif
- 1920x1920.jpeg.webp
据我所知,以下正则表达式可以正确检测到它们:
^(.+[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
您的正则表达式中似乎嵌入了一个 non-printing 控制字符。将您的代码从此处复制并粘贴到 3v4l.org shows:
Warning: preg_match(): Unknown modifier '�' in /in/pXQUE on line 4
我手动重新输入了密钥,现在 works:
FOUND:videos_background-150x150.png
我建议重新键入您的源代码,或者从 3v4l 复制我的源代码。
我正在尝试制作一个 php 脚本来搜索我网站中的特定路径并删除一系列旧的和未使用的图像。
它们可以以 .jpg
、.jpeg
、.gif
、.png
结尾,有些还在我刚才的那些后面附加了 .webp
提到。
图片格式通常以:-xxxx-xxxx-.extension
结尾 例如:
- 32x32.png.webp
- 50x150.png
- 720x1024.gif
- 1920x1920.jpeg.webp
据我所知,以下正则表达式可以正确检测到它们:
^(.+[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
您的正则表达式中似乎嵌入了一个 non-printing 控制字符。将您的代码从此处复制并粘贴到 3v4l.org shows:
Warning: preg_match(): Unknown modifier '�' in /in/pXQUE on line 4
我手动重新输入了密钥,现在 works:
FOUND:videos_background-150x150.png
我建议重新键入您的源代码,或者从 3v4l 复制我的源代码。