如何获取文件扩展名 (获取文件的扩展名) 引言

通常文件扩展名在Linux系统毫无意义,只是用来标记文件属于哪种类型?但大多数人从浏览器上访问Web程序。提交给服务器的文件有扩展名称。例如,上传图片和上传文件是一些经典应用。

那么如何在编程中准确获取文件的扩展名,并根据分类进行相应的处理呢?实现的方法有很多。今天,我们将向您介绍一些最佳实践。

粗糙的例子

获取上传图片的扩展名,有些学生可能会这样写:

$userfile_name = $_FILES['image']['name'];$userfile_extn = explode(".", strtolower($_FILES['image']['name&#;

然后直接执行文件名 explode ,切出来的是属组。假设上传文件的最后一个字段是文件的扩展名,那么文件的扩展名就是end($userfile_extn)。假设上传文件的最后一个字段是文件的扩展名,那么文件的扩展名就是

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 这样的字符串。

如果 $image 不为 false,所以是属组,其中键 mime 返回是图片文件类型 image/jpeg 这样的字符串。

但是没什么LUAN用!

写在最后

比较,还是 pathinfo 最香。

因为这就是 PHP 为什么不使用官方给定的方式?

Happy coding :_)

我是 @程序员助手 ,继续分享编程知识,欢迎关注。