如何在 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中获取没有扩展名的文件对象的名称? [复制]

如何在PHP下开启PDO MySQL的扩展

如何在PHP下开启PDO MySQL的扩展

php 如何在PHP中获取(提取)文件扩展名?

如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

Android - 如何获取文件扩展名? [复制]