那么在编程中如何准确获取文件的扩展名,并根据分类做相应的处理呢?实现的方法有很多。本日我们给大家先容一些最佳实践。
一个粗糙的示例
获取一张上传图片的扩展名,有些同学可能会这样写:
$userfile_name = $_FILES['image']['name'];$userfile_extn = explode(".", strtolower($_FILES['image']['name']));
那么直接对文件名进行 explode ,裁切出来的是一个属组。假设我们管控上传文件的末了一个字段是文件的扩展名,那么该文件的扩展名便是 end($userfile_extn)。

这样的实现方法完美吗?有更好的吗?
如果文件名字符串比较分外,这样的程序会不会 explode 失落败返回 False?从而抛出非常?
有可能会!
以是这个写法是有 bug 的。
PHP 都准备好函数了!
PHP 是一个工具箱,内置了无数实用的函数。有一个函数便是专门设计来办理这个需求的:pathinfo。下面是用法:
$path = $_FILES['image']['name'];$ext = pathinfo($path, PATHINFO_EXTENSION);
瞬间就觉得喷鼻香多了。
还是得多看文档,我把这个函数的参数和用法贴不才面。
以是说只管即便不要重复造轮子。官方写好的轮子拿来用便是,它就悄悄的躺在帮助手册里等着你去创造。
轮子哥当然程序都是活的。由于我开拓者,给出别的办理方案无可厚非。用 PHP 自带的函数实现这个功能本来就有 N 多个办法。下面我们贴几个看起来还不错的轮子。最最少容错性比最上面的那个写法高一些。
比如利用 strrpos + substr 实现的:
$userfile_name = $_FILES['image']['name'];$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1);
通过查找“.”所在的位置,并向后一位开始截取到字符串末端。这个写法避免了 explored 截取数组失落败,从而返回 false 这个 bug。
再比如,有开拓者人为你只是要图片的扩展名,那么大可以直策应用 image 干系的函数 getimagesize:
$image = getimagesize($_FILES['image']['tmp_name']);
getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。
如果不能访问 filename 指定的图像或者其不是有效的图像,getimagesize() 将返回 FALSE 并产生一条 E_WARNING 级的缺点。
上述写法中,如果 $image 不为 false,那么便是一个属组,个中键 mime 返回的便是图片文件类型 image/jpeg 这样的字符串。
但是没什么LUAN用!
比较来比较去,还是 pathinfo 最喷鼻香。
由于这便是 PHP 官方给定的办法,为啥不用?
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。