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编程中八种常见的文件操作方式
Nov 19 PHP
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 PHP
php打造属于自己的MVC框架
Mar 07 PHP
有道搜索和IP138的IP的API接口(PHP应用)
Nov 29 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
Jul 13 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
php实现根据身份证获取精准年龄
Feb 26 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
php实例分享之mysql数据备份
2014/05/19 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
微信小程序实现简易table表格
2020/06/19 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
SVM基本概念及Python实现代码
2017/12/27 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
用python制作个视频下载器
2021/02/01 Python
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
保险公司晨会主持词
2014/03/22 职场文书
文秘应届生求职信
2014/07/05 职场文书
煤矿安全协议书
2014/08/20 职场文书
具结保证书范本
2015/05/11 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS