php文件扩展名判断及获取文件扩展名的N种方法


Posted in PHP onSeptember 12, 2015

下面代码是php文件扩展名判断

<!DOCTYPE>
<html>
<head>
 <meta http-equiv="Content-type" content="text/html" charset="utf-8">
 <title>check file</title>
</head>
<body>
<b>文件扩展名验证</b>
<input type="text" name="int" value="文件.php" onblur="check(this)" id="int">
<input type="button" value="检测" onclick="check_value()">
<script>
 function check(obj){
  if(obj.value == "" || obj.value.length<3){
   alert("输入的长度不能小于3且不能为空!");
   obj.focus();
  }
 }
 function check_value(){
  var str = $("int").value;
  var repx = /\.(php|asp|jsp)$/i;
  var type = str.substring(str.lastIndexOf("."),str.length);
  if(type.match(repx) && str.lastIndexOf(".") != -1){
   alert("文件扩展名正确");
   $("int").focus();
  }else{
   alert("文件扩展名有误");
   $("int").focus();
  }
 }
 function $(obj){
  return document.getElementById(obj);
 }
</script>
</body>
</html>

php文件扩展名判断及获取文件扩展名的N种方法

PHP中获取文件扩展名的N种方法

基本上就以下这几种方式:

第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文件扩展名判断及获取文件扩展名的N种方法,希望大家喜欢。

PHP 相关文章推荐
php empty函数 使用说明
Aug 10 PHP
php 模拟POST|GET操作实现代码
Jul 20 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
PHP生成json和xml类型接口数据格式
May 17 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
微信支付的开发流程详解
Sep 13 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 #PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 #PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 #PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 #PHP
四个常见html网页乱码问题及解决办法
Sep 08 #PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 #PHP
php验证码实现代码(3种)
Sep 07 #PHP
You might like
yii上传文件或图片实例
2014/04/01 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php构造函数的继承方法
2015/02/09 PHP
php获取错误信息的方法
2015/07/17 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
python文件操作相关知识点总结整理
2016/02/22 Python
Django 大文件下载实现过程解析
2019/08/01 Python
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
销售辞职报告范文
2014/01/12 职场文书
大学毕业感言100字
2014/02/03 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
人事任命书怎么写
2014/06/05 职场文书
公司领导班子对照材料
2014/08/18 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书