PHP中获取文件扩展名的N种方法小结


Posted in PHP onFebruary 27, 2012

第1种方法:

function get_extension($file) 
{ 
substr(strrchr($file, '.'), 1); 
}

第2种方法:
function get_extension($file) 
{ 
return substr($file, strrpos($file, '.')+1); 
}

第3种方法:
function get_extension($file) 
{ 
return end(explode('.', $file)); 
}

第4种方法:
function get_extension($file) 
{ 
$info = pathinfo($file); 
return $info['extension']; 
}

第5种方法:
function get_extension($file) 
{ 
return pathinfo($file, PATHINFO_EXTENSION); 
}

以上几种方式粗看了一下,好像都行,特别是1、2种方法,在我不知道pathinfo有第二个参数之前也一直在用。但是仔细考虑一下,前四种方法都有各种各样的毛病。要想完全正确获取文件的扩展名,必须要能处理以下三种特殊情况。
没有文件扩展名
路径中包含了字符.,如/home/test.d/test.txt
路径中包含了字符.,但文件没有扩展名。如/home/test.d/test
很明显:1、2不能处理第三种情况,3不能正确处理第一三种情况。4可以正确处理,但是在不存在扩展名时,会发出一个警告。只有第5种方法才是最正确的方法。顺便看一下pathinfo方法。官网上介绍如下:
$file_path = pathinfo('/www/htdocs/your_image.jpg');

echo "$file_path ['dirname']\n";
echo "$file_path ['basename']\n";
echo "$file_path ['extension']\n";
echo "$file_path ['filename']\n"; // only in PHP 5.2+
它会返回一个数组,包含最多四个元素,但是并不会一直有四个,比如在没有扩展名的情况下,就不会有extension元素存在,所以第4种方法才会发现警告。但是phpinfo还支持第二个参数。可以传递一个常量,指定返回某一部分的数据:
PATHINFO_DIRNAME - 目录
PATHINFO_BASENAME - 文件名(含扩展名)
PATHINFO_EXTENSION - 扩展名
PATHINFO_FILENAME - 文件名(不含扩展名,PHP>5.2)
这四个常量的值分别是1、2、4、8,刚开始我还以为可以通过或运算指定多个:
pathinfo($file, PATHINFO_EXTENSION | PATHINFO_FILENAME);
后来发现这样不行,这只会返回几个进行或运算常量中最小的那个。也就是四个标志位中最小位为1的常量。
以下是一些补充方法
一,php explode函数

$pic = 'abc.php'; 
$pics = explode('.' , $pic); 
echo $num = count($pics); 
echo '<br>'.$pics[$num-1];

这样就可以输出
.php了。

下面利用foreach

foreach ($pics as $value) //2 
{ 
$a = $value; 
} 
echo $a.'<br>';

来有一个比较好的函数end我推荐使用此函数快捷 end函数用法

echo end($pics); 
echo '<br>';

其它的访方法可以在文件上传时判断,不过那需要文件上传不上传我们不能使用$_FILES来操作。

PHP 相关文章推荐
提升PHP速度全攻略
Oct 09 PHP
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
php at(@)符号的用法简介
Jul 11 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
JSON在PHP中的应用介绍
Sep 08 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
PHP判断变量是否为0的方法
Feb 08 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
PHP折半(二分)查找算法实例分析
May 12 PHP
php实现等比例压缩图片
Jul 26 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
PHP中的正则表达式函数介绍
Feb 27 #PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 #PHP
一些需要禁用的PHP危险函数(disable_functions)
Feb 23 #PHP
PHP面向对象法则
Feb 23 #PHP
优化PHP程序的方法小结
Feb 23 #PHP
数据库中排序的对比及使用条件详解
Feb 23 #PHP
PHP中几个常用的魔术常量
Feb 23 #PHP
You might like
set_include_path在win和linux下的区别
2008/01/10 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
php查看当前Session的ID实例
2015/03/16 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
JS 判断代码全收集
2009/04/28 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
python中property属性的介绍及其应用详解
2019/08/29 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
中专毕业生自荐信
2013/11/16 职场文书
物流仓储计划书
2014/01/10 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
教师年度考核评语
2014/04/28 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
技术负责人岗位职责
2015/02/10 职场文书
奖金申请报告模板
2015/05/15 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
Python使用Web框架Flask开发项目
2022/06/01 Python