PHP:如何移除$file_path字符串中的"gallery/"前缀与文件格式后缀
移除图片路径中的前缀与文件后缀
刚好碰到过类似的PHP图片库路径处理需求,针对你要去掉$file_path里的gallery/前缀和文件后缀的问题,这里分享几个实用的实现方式:
方法1:分步处理(逻辑最直观)
先把固定前缀gallery/移除,再用PHP自带的路径处理函数提取纯文件名:
// 第一步:移除"gallery/"前缀 $no_prefix = str_replace('gallery/', '', $file_path); // 第二步:提取不带后缀的文件名 $final_name = pathinfo($no_prefix, PATHINFO_FILENAME); // 测试示例 $file_path = "gallery/png.png"; echo $final_name; // 输出: png
pathinfo是PHP专门为路径处理设计的函数,用PATHINFO_FILENAME参数能精准拿到去掉后缀的部分,不用担心文件名里有特殊字符的问题,稳定性拉满。
方法2:用basename一步搞定
basename本身就可以获取文件名,还能指定后缀来移除,结合前缀替换写起来更简洁:
// 先清掉前缀,再用basename移除对应后缀 $no_prefix = str_replace('gallery/', '', $file_path); $final_name = basename($no_prefix, '.' . pathinfo($no_prefix, PATHINFO_EXTENSION)); // 也可以写成一行(可读性稍弱,但代码更短) $final_name = basename(str_replace('gallery/', '', $file_path), '.' . pathinfo($file_path, PATHINFO_EXTENSION));
这个方法特别适合你这种明确是图片文件的场景,能精准匹配当前文件的后缀来移除,不会误删其他内容。
方法3:正则表达式(适合特殊场景)
如果你的路径有一些不固定的情况(比如前缀偶尔有变体?不过你这里是固定的gallery/),正则可以一次性完成前缀和后缀的移除:
preg_match('/gallery\/(.*?)\./', $file_path, $matches); $final_name = $matches[1]; // 测试一下 $file_path = "gallery/gif.gif"; echo $final_name; // 输出: gif
不过要注意,如果你的文件名本身包含.的话,这个正则就会出问题(比如gallery/test.image.png会提取成test),所以只适合文件名里没有点的场景。
总的来说,推荐用方法1或者方法2,逻辑清晰、兼容性好,是日常开发里最常用的方案。
内容的提问来源于stack exchange,提问作者Kake




