php 如何获取文件的后缀名


Posted in PHP onJune 05, 2016

比如图片文件的后缀,jpg或gif等

有两个方法

一,假如$img为图片文件名

$img=12345.gif;
$img_ext = substr($img, strrpos($img, '.'));

二,用到php数组,先把文件名字符串读取到数组中

$ext2=explode(".",$img);
      $count=count($ext2);
      $count2=$count-1;
      $file_name  = $urlstr .'.'.$ext2[$count2];//得到后缀并重新定义新的文件名$file_name

 另外附上其他小伙伴总结出来的方法:

第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有第二个参数之前也一直在用。但是仔细考虑一下,前四种方法都有各种各样的毛病。要想完全正确获取文件的扩展名,必须要能处理以下三种特殊情况。

  1. 没有文件扩展名
  2. 路径中包含了字符.,如/home/test.d/test.txt
  3. 路径中包含了字符.,但文件没有扩展名。如/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 相关文章推荐
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
PHP session有效期问题
Apr 26 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
一个php短网址的生成代码(仿微博短网址)
May 07 PHP
php判断一个数组是否为有序的方法
Mar 27 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 24 PHP
PHP常用文件操作函数和简单实例分析
Jun 03 #PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 #PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 #PHP
PHP学习笔记之php文件操作
Jun 03 #PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 #PHP
php for 循环使用的简单实例
Jun 02 #PHP
Yii多表联合查询操作详解
Jun 02 #PHP
You might like
一些花式咖啡的配方
2021/03/03 冲泡冲煮
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
JS 自动安装exe程序
2008/11/30 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
使用Python绘制图表大全总结
2017/02/11 Python
Python反射用法实例简析
2017/12/22 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
css3中transition属性详解
2014/09/02 HTML / CSS
UDP协议功能
2013/01/06 面试题
某公司部分笔试题
2013/11/05 面试题
党在我心中的演讲稿
2014/09/13 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
秋菊打官司观后感
2015/06/03 职场文书
烈士陵园观后感
2015/06/08 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
解决xampp安装后Apache无法启动
2022/03/21 Servers
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers