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 相关文章推荐
一个程序下载的管理程序(四)
Oct 09 PHP
phpfans留言版用到的install.php
Jan 04 PHP
实用函数2
Nov 08 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
Mar 26 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
详解PHP版本兼容之openssl调用参数
Jul 25 PHP
php微信扫码支付 php公众号支付
Mar 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
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP7 新增功能
2021/03/09 PHP
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
nodejs教程之入门
2014/11/21 NodeJs
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
Python中functools模块函数解析
2017/03/12 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
python绘制中国大陆人口热力图
2018/11/07 Python
彻底理解Python中的yield关键字
2019/04/01 Python
Python中包的用法及安装
2020/02/11 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
毕业设计论文致谢词
2015/05/14 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js
Python实现信息管理系统
2022/06/05 Python