【问题标题】:How to get the file extension in PHP? [duplicate]如何在 PHP 中获取文件扩展名? [复制]
【发布时间】:2012-05-09 05:45:15
【问题描述】:

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

$userfile_name = $_FILES['image']['name'];
$userfile_extn = explode(".", strtolower($_FILES['image']['name']));

有没有办法只获取扩展本身?

【问题讨论】:

    标签: php file-extension


    【解决方案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);
      

      【讨论】:

      • 我不推荐这个。您依赖于从现在起相同年份的数组顺序。这是一个懒惰的解决方案,很可能会在未来引起问题。
      猜你喜欢
      • 2014-01-10
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2014-04-14
      • 2012-03-24
      • 1970-01-01
      相关资源
      最近更新 更多