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

Kei*_*wer 437 php file-extension

可能重复:
如何在PHP中提取文件扩展名?

我希望获得我上传的图像的文件扩展名,但我只是得到了一个数组.

$userfile_name = $_FILES['image']['name'];
$userfile_extn = explode(".", strtolower($_FILES['image']['name']));
Run Code Online (Sandbox Code Playgroud)

有没有办法让扩展本身?

Thi*_*ter 1146

无需使用字符串函数.您可以使用实际设计的内容来满足您的需求pathinfo():

$path = $_FILES['image']['name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);
Run Code Online (Sandbox Code Playgroud)

  • @ foureight84:如果你有名为`image []`的上传字段,那就是这种情况...... (10认同)
  • @ user1914292我看不出它是如何相关的,你应该总是修改自己使用的代码,而不是仅仅复制它并期望它能够工作.因此,如果您期望存档文件而不是图像,您应该使您的代码也能使用它(而不仅仅是复制这个答案并期望它适合您) (5认同)
  • @ThiefMaster这只返回FIRST扩展名.在图像的情况下,这可能不相关,但当有人上传档案时,它可能是.tar.gz或其他...... (3认同)
  • 我有点修改你的代码并创建了一个函数,以防有人想要使用一个函数.这是代码:function getFileExtension($ path){$ ext = pathinfo($ path,PATHINFO_EXTENSION); 返回$ ext; } (2认同)

小智 55

这也可以:

$array = explode('.', $_FILES['image']['name']);
$extension = end($array);
Run Code Online (Sandbox Code Playgroud)

  • **重要说明**:这将失败,路径如:`/ var/www/website.com/somefile`(最好使用pathinfo). (31认同)
  • "只有变量应该通过引用传递",PHP手册 (19认同)

Jul*_*ien 26

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

$userfile_name = $_FILES['image']['name'];
$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1);
Run Code Online (Sandbox Code Playgroud)

但是,要检查文件的类型,使用mime_content_type是一种更好的方法:http://www.php.net/manual/en/function.mime-content-type.php

  • **重要说明**:这将失败,路径如:`/ var/www/website.com/somefile`. (13认同)
  • 比`pathinfo()`更好?我不这么认为. (4认同)
  • 如果文件名带有“.”,这将失败。在它发生在 final 之前。分隔实际的文件扩展名。您会惊讶于哪些文件名带有多个“.”。 (3认同)
  • 比爆炸更好;-).但是,你是对的,在启用时,pathinfo是一种更好的方法(一些共享服务器禁用此功能......). (2认同)

Bal*_*lan 23

您可以尝试使用此类型的mime

$image = getimagesize($_FILES['image']['tmp_name']);
Run Code Online (Sandbox Code Playgroud)

$image['mime'] 将返回mime类型.

此功能不需要GD库.你可以在这里找到文档.

这将返回图像的mime类型.

有些人使用$_FILES["file"]["type"]它,但它不像浏览器给出的那样可靠,而不是PHP.

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

首先确保在开发过程中成功上载图像,然后再对图像执行任何操作.


ila*_*nco 11

怎么样

$ext = array_pop($userfile_extn);
Run Code Online (Sandbox Code Playgroud)

  • 我不推荐这个.从现在开始,你依赖的是数组的顺序.这是一个懒惰的解决方案,很可能会在未来引发问题. (3认同)