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 MSSQL 存储过程的方法
Dec 24 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
浅谈php和js中json的编码和解码
Oct 24 PHP
php安全配置记录和常见错误梳理(总结)
Mar 28 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 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
一个多文件上传的例子(原创)
2006/10/09 PHP
PHP中的float类型使用说明
2010/07/27 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
jQuery实现径向动画菜单效果
2015/07/17 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
React组件生命周期详解
2017/07/03 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
Python使用Django实现博客系统完整版
2020/09/29 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
python 字符串追加实例
2019/07/20 Python
Python中调用其他程序的方式详解
2019/08/06 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
经理秘书岗位职责
2013/11/14 职场文书
分家协议书
2014/04/21 职场文书
2015年大学生工作总结
2015/04/21 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
Python 可迭代对象 iterable的具体使用
2021/08/07 Python
MySQL详细讲解变量variables的用法
2022/06/21 MySQL
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python