如何在PHP中获取文件扩展名?

如何在PHP中获取文件扩展名?,php,file-extension,Php,File Extension,我希望得到我上传的图像的文件扩展名,但我刚刚得到一个数组 $userfile_name = $_FILES['image']['name']; $userfile_extn = explode(".", strtolower($_FILES['image']['name'])); 有没有办法只获取扩展本身?如何 $ext = array_pop($userfile_extn); 不需要使用字符串函数。你可以使用一些真正为你想要的东西: 更好的方法是使用strrpos+substr(比爆炸更快

我希望得到我上传的图像的文件扩展名,但我刚刚得到一个数组

$userfile_name = $_FILES['image']['name'];
$userfile_extn = explode(".", strtolower($_FILES['image']['name']));
有没有办法只获取扩展本身?

如何

$ext = array_pop($userfile_extn);

不需要使用字符串函数。你可以使用一些真正为你想要的东西:


更好的方法是使用strrpos+substr(比爆炸更快):

但是,要检查文件的类型,使用mime\u content\u type是更好的方法:

对于mime类型,您可以尝试使用此选项

$image = getimagesize($_FILES['image']['tmp_name']);
$image['mime']
将返回mime类型

此函数不需要GD库。您可以找到文档

这将返回图像的mime类型

有些人使用
$\u文件[“file”][“type”]
,但它不可靠,因为它是由浏览器而不是PHP提供的

您可以使用ThiefMaster建议的
pathinfo()
检索图像扩展名


在对图像执行任何操作之前,首先确保图像在显影过程中已成功上载。

这同样适用:

$array = explode('.', $_FILES['image']['name']);
$extension = end($array);

比pathinfo()更好。?我不这么认为。总比爆炸好;-)。但是,您是对的,启用时pathinfo是一种更好的方法(某些交互服务器禁用此功能…)。重要注意事项:这将在以下路径中失败:
/var/www/website.com/somefile
。如果文件名中有一个“.”出现在最终文件之前,则会失败。它分隔了实际的文件扩展名。您会惊讶于有哪些文件名包含多个“.”。
mime\u content\u type
在当前的PHP版本中被弃用。“只有变量应该通过引用传递”,PHP手册这不是一个好方法,因为
end
函数旨在将数组的内部指针移动到数组的末尾并返回该元素。问题是数组是通过引用传递的,由于数组是动态生成的,因此不能通过引用传递,因此会出现警告或失败,具体取决于您的PHP版本。重要提示:这将在以下路径中失败:
/var/www/website.com/somefile
(最好使用pathinfo)。将Windows上的文件扩展名从.png更改为.jpg时,此操作将失败。在水下,它将始终是一个.png。$path=$\u文件['image']['name'][0];实际文件名位于数组中。pathinfo将只计算一个字符串。@foureight84:只有当您有名为
image[]
的上载字段时才是这种情况……我稍微修改了您的代码并生成了一个函数,以防有人想使用函数。下面是代码:函数getFileExtension($path){$ext=pathinfo($path,pathinfo_EXTENSION);return$ext;}@ThiefMaster这只返回第一个扩展名。在图像的情况下,这可能不相关,但当有人上传存档文件时,它可能是.tar.gz或其他…@user1914292我不认为这有什么关系,你应该总是修改代码以供自己使用,而不是仅仅复制它并期望它工作。因此,如果您希望使用归档文件而不是图像,那么您也应该让您的代码能够使用它(而不仅仅是复制这个答案并期望它能为您工作),我不建议这样做。您所依赖的阵列顺序与现在相同。这是一个懒惰的解决方案,很可能会在将来引起问题。
$image = getimagesize($_FILES['image']['tmp_name']);
$array = explode('.', $_FILES['image']['name']);
$extension = end($array);