常用知识 - 获取文件后缀

  • 作者:KK

  • 发表日期:2017.9.21


不靠谱思路1:找到最后一个.号位置开始substr

你是想这样嘛:

$filepath = 'D:/a/b.jpg';
$pos = strrpos($filepath, '.');
if($pos === false){
	exit('该文件没有后缀');
}
echo substr($filepath, $pos + 1); // jpg

你可能忽略了目录名也能带.号,于是看看这样会如何:

$filepath = 'D:/a.b/c'; // 注意 . 号在中间目录里
$pos = strrpos($filepath, '.');
if($pos === false){
	exit('该文件没有后缀');
}
echo substr($filepath, $pos + 1); // b/c

不靠谱思路2:以.号explode再取最后一个元素

$filepath = 'D:/a.b/c';
$items = explode('.', $filepath);
if(count($items) == 1){
	exit('该文件没有后缀');
}
echo end($items); // b/c

靠谱思路:用pathinfo函数取出信息

$filepath = 'D:/a.b/c.jpg';
$info = pathinfo($filepath);
if(!isset($info['extension'])){
	exit('该文件无后缀');
}
echo $info['extension'];

其实pathinfo还能用得更简单

echo pathinfo('D:/a.b/c', PATHINFO_EXTENSION);	// 空

echo pathinfo('D:/a.b/c.jpg', PATHINFO_EXTENSION);	// jpg

//URL不行
echo pathinfo('http://xxx.com/a.b/c.png?aa=11&bb=22', PATHINFO_EXTENSION);	// png?aa=11&bb=22

获取URL所指的文件类型

$url = 'http://xxx.com/a.b/c.png?aa=11&bb=22';
$urlInfo = parse_url($url);
if(isset($urlInfo['path'])){
	$info = pathinfo($urlInfo['path']);
	if(!isset($info['extension'])){
		exit('该文件无后缀');
	}
	echo $info['extension'];	// png

	//顺便也能取出文件名
	echo basename($urlInfo['path']);	// c.png
}