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操作文件方法问答
Mar 16 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
May 07 PHP
浅析php数据类型转换
Jan 09 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
Yii学习总结之安装配置
Feb 22 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python学习数据结构实例代码
2015/05/11 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
介绍一下grep命令的使用
2015/06/12 面试题
高中化学教学反思
2014/01/13 职场文书
白血病捐款倡议书
2014/05/14 职场文书
小学大队长竞选稿
2015/11/20 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis