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 相关文章推荐
PHP5 安装方法
Oct 09 PHP
使用数据库保存session的方法
Oct 09 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
基于empty函数的判断详解
Jun 17 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
PHP中copy on write写时复制机制介绍
May 13 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
PHP读取PPT文件的方法
Dec 10 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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
解析php中如何调用用户自定义函数
2013/08/06 PHP
浅谈json_encode用法
2015/03/05 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
使用python加密自己的密码
2015/08/04 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
python pygame实现2048游戏
2018/11/20 Python
python编写猜数字小游戏
2019/10/06 Python
Python新手学习raise用法
2020/06/03 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
外语系毕业生求职自荐信
2014/04/12 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
体育活动总结
2015/02/04 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android