stripos vs glob 取消链接
stripos vs glob for unlinking
我想删除没有出现在这个数组中的文件。我知道部分文件名,但不知道文件名后缀的大小参数,如 filename-50x75.jpg, filename-100x77.jpg , filename-500x377.jpg
。
我想从目录中删除上面的图片,不想删除下面的图片。
$list_of_allowed_images=array("filename-50x50.jpg","filename-50x70.jpg","filename-90x50.jpg","filename-100x100.jpg","filename-150x150.jpg","filename-250x200.jpg","filename-300x250.jpg","filename-360x270.jpg","filename-390x250.jpg","filename-500x345.jpg","filename-768x576.jpg","filename-820x400.jpg","filename-1024x768.jpg");
我有以下片段:
foreach(glob($base_path_del.$only_obs_img."[0-9][0-9]*x*.{jpg,gif,png}", GLOB_BRACE) as $file_to_del_now)
{
if(!in_array($file_to_del_now,$list_of_allowed_images))
{
unlink($file_to_del_now);
}
}
但我认为它可以更有效率。还有另一种更有效的方法吗?
这是我的推荐:
(未经测试的代码)
chdir($base_path_del);
$files = glob($only_obs_img."[0-9][0-9]*x*.{jpg,gif,png}", GLOB_BRACE);
$whitelist_regex = "/-(?:50x[57]0|90x50|100x100|150x150|250x200|300x250|360x270|390x250|500x345|768x576|820x400|1024x768)\.jpg$/i";
$removables = preg_grep($whitelist_regex, $files, PREG_GREP_INVERT);
foreach ($removables as $filename) {
unlink($filename);
}
所以...
更改当前工作目录,使 glob()
不包含合格文件集合中的路径。
反转 preg_grep()
以便保留不符合白名单正则表达式要求的文件。
那就循环调皮名单,把那批东西删掉。
正则表达式模式归结为您的白名单数组逻辑。检查从文件名的最后一个 -
开始,检查尺寸,不区分大小写地检查 .jpg
,然后确保文件名已经结束。
p.s。或者 array_map()
如果你不想破坏函数式风格。
array_map('unlink', $removables);
我想删除没有出现在这个数组中的文件。我知道部分文件名,但不知道文件名后缀的大小参数,如 filename-50x75.jpg, filename-100x77.jpg , filename-500x377.jpg
。
我想从目录中删除上面的图片,不想删除下面的图片。
$list_of_allowed_images=array("filename-50x50.jpg","filename-50x70.jpg","filename-90x50.jpg","filename-100x100.jpg","filename-150x150.jpg","filename-250x200.jpg","filename-300x250.jpg","filename-360x270.jpg","filename-390x250.jpg","filename-500x345.jpg","filename-768x576.jpg","filename-820x400.jpg","filename-1024x768.jpg");
我有以下片段:
foreach(glob($base_path_del.$only_obs_img."[0-9][0-9]*x*.{jpg,gif,png}", GLOB_BRACE) as $file_to_del_now)
{
if(!in_array($file_to_del_now,$list_of_allowed_images))
{
unlink($file_to_del_now);
}
}
但我认为它可以更有效率。还有另一种更有效的方法吗?
这是我的推荐:
(未经测试的代码)
chdir($base_path_del);
$files = glob($only_obs_img."[0-9][0-9]*x*.{jpg,gif,png}", GLOB_BRACE);
$whitelist_regex = "/-(?:50x[57]0|90x50|100x100|150x150|250x200|300x250|360x270|390x250|500x345|768x576|820x400|1024x768)\.jpg$/i";
$removables = preg_grep($whitelist_regex, $files, PREG_GREP_INVERT);
foreach ($removables as $filename) {
unlink($filename);
}
所以...
更改当前工作目录,使 glob()
不包含合格文件集合中的路径。
反转 preg_grep()
以便保留不符合白名单正则表达式要求的文件。
那就循环调皮名单,把那批东西删掉。
正则表达式模式归结为您的白名单数组逻辑。检查从文件名的最后一个 -
开始,检查尺寸,不区分大小写地检查 .jpg
,然后确保文件名已经结束。
p.s。或者 array_map()
如果你不想破坏函数式风格。
array_map('unlink', $removables);