通常文件扩展名在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 为什么不使用官方给定的方式?
我是 @程序员助手 ,继续分享编程知识,欢迎关注。