PHP中使用通配符合并文件删除函数 实现多尺寸图片批量清理
问题解答
a. 你的实现思路是否合理?
完全合理,是当前场景下的最优实现方案:
- 避免了为每个尺寸单独编写删除逻辑的冗余代码
- 后续如果新增其他尺寸的衍生图,不需要修改删除逻辑,可维护性大幅提升
- 直接复用glob原生的通配符能力,没有额外性能开销,实现成本极低
b. 如何用通配符实现需求?
glob函数支持*作为通配符,可以匹配任意长度的任意字符,你只需要把尺寸前缀的位置替换为*即可,同时建议增加容错判断,避免目录权限异常、路径不存在等情况抛出PHP警告:
// 匹配所有尺寸前缀的同名衍生图 $matchedFiles = glob($destinationFolder . '*-' . $db_profileImage); // 仅当查询到匹配文件时执行删除 if ($matchedFiles !== false) { foreach ($matchedFiles as $file) { // 额外校验确保是文件,避免误操作 if (is_file($file)) { unlink($file); } } }
安全优化建议
为了避免通配符被恶意利用导致误删其他文件,建议提前校验$db_profileImage的格式,确保只包含合法文件名字符,禁止出现glob通配符(*、?、[]等):
// 校验文件名格式,仅允许字母、数字、下划线、点,后缀为常见图片格式 if (!preg_match('/^[a-zA-Z0-9_.]+\.(jpg|jpeg|png|gif|webp)$/i', $db_profileImage)) { throw new Exception('非法的图片文件名'); }
内容的提问来源于stack exchange,提问作者pjk_ok
相关产品推荐
相关产品推荐

