如何在 PHP 中获取文件扩展名? [复制]
Posted
技术标签:
【中文标题】如何在 PHP 中获取文件扩展名? [复制]【英文标题】:How to get the file extension in PHP? [duplicate] 【发布时间】:2012-05-09 05:45:15 【问题描述】:我希望获得我正在上传的图像的文件扩展名,但我只是得到一个数组。
$userfile_name = $_FILES['image']['name'];
$userfile_extn = explode(".", strtolower($_FILES['image']['name']));
有没有办法只获取扩展本身?
【问题讨论】:
【参考方案1】:无需使用字符串函数。您可以使用实际为您想要的东西设计的东西:pathinfo()
:
$path = $_FILES['image']['name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);
【讨论】:
$path = $_FILES['image']['name'][0];实际文件名在一个数组中。 pathinfo 只会评估一个字符串。 @foureight84:只有上传字段名为image[]
...
我稍微修改了你的代码并制作了一个函数,以防有人想使用一个函数。下面是代码:function getFileExtension($path) $ext = pathinfo($path, PATHINFO_EXTENSION);返回 $ext;
@ThiefMaster 只返回第一个扩展名。在图像的情况下,这可能不相关,但是当有人上传档案时,它可能是 .tar.gz 或其他东西......
@user1914292 我不明白这有什么关系,您应该始终修改代码以供自己使用,而不是仅仅复制它并期望它工作。因此,如果您期望存档文件而不是图像,您应该使您的代码也可以使用它(而不仅仅是复制这个答案并期望它为您工作)【参考方案2】:
这也可以:
$array = explode('.', $_FILES['image']['name']);
$extension = end($array);
【讨论】:
“只有变量应该通过引用传递”,php 手册 这不是一个好方法,因为end
函数旨在将数组的内部指针移动到数组的末尾并返回该元素。问题是数组是通过引用传递的,由于你的数组是动态生成的,它不能通过引用传递,因此警告或失败,取决于你的 PHP 版本。
重要提示:这将失败,路径如下:/var/www/website.com/somefile
(最好使用 pathinfo)。
当您将 Windows 上的文件扩展名从 .png 更改为 .jpg 时,这将失败。在水下,它总是一个 .png。【参考方案3】:
更好的方法是使用 strrpos + substr(比爆炸更快):
$userfile_name = $_FILES['image']['name'];
$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1);
但是,要检查文件的类型,使用 mime_content_type 是一种更好的方法: http://www.php.net/manual/en/function.mime-content-type.php
【讨论】:
比pathinfo()
好吗?我不这么认为。
比爆炸好 ;-)。但是,你是对的,启用时 pathinfo 是一种更好的方法(一些共同服务器禁用此功能......)。
重要提示:这将失败,路径如下:/var/www/website.com/somefile
。
如果文件名有“.”,这将失败在它最后发生之前。分隔实际文件扩展名。你会惊讶于有多个文件名有多个 '.'
mime_content_type
在当前 PHP 版本中已弃用。【参考方案4】:
你可以试试这个 mime 类型
$image = getimagesize($_FILES['image']['tmp_name']);
$image['mime']
将返回 mime 类型。
此函数不需要 GD 库。你可以找到文档here。
这将返回图像的 MIME 类型。
有些人使用$_FILES["file"]["type"]
,但它并不可靠,因为浏览器给出的而不是 PHP 给出的。
您可以按照 ThiefMaster 的建议使用 pathinfo()
来检索图像扩展名。
在对图像执行任何操作之前,首先确保图像在开发过程中已成功上传。
【讨论】:
【参考方案5】:怎么样
$ext = array_pop($userfile_extn);
【讨论】:
我不推荐这个。您依赖于从现在起相同年份的数组顺序。这是一个懒惰的解决方案,很可能会在未来引起问题。以上是关于如何在 PHP 中获取文件扩展名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
java - 如何在Java中获取没有扩展名的文件对象的名称? [复制]
如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?