【问题标题】:Get extension from filename like variable [duplicate]从文件名中获取扩展名,如变量[重复]
【发布时间】:2011-09-13 07:55:08
【问题描述】:

可能重复:
How to extract a file extension in PHP?

我有一个变量$filename="filename.ext" 或$filename="filena.m.e.ext" 等等。如何从变量/字符串中提取扩展名(此处为ext)?变量可能会改变或可能有多个点..在这种情况下,我想得到最后一个点之后的部分..

【问题讨论】:

    标签: php file-extension


    【解决方案1】:

    你可以这样定义一个函数:

    function get_file_extension($filename)
    {
        /*
         * "." for extension should be available and not be the first character
         * so position should not be false or 0.
         */
        $lastDotPos = strrpos($fileName, '.');
        if ( !$lastDotPos ) return false;
        return substr($fileName, $lastDotPos+1);
    }
    

    或者你可以使用 PHP 内置的 Spl_FileInfo 对象

    【讨论】:

    • +1 提醒了这一点。我总觉得我没有尽我所能(而且应该)使用 SPL。
    • +1 因为这也适用于 URL。
    • 很酷,但最好从头到尾检查!因为圆点一般都差不多到底。使用循环,当我们到达第一个点时,我们 substr !也比 pathinfo() 快吗?事实上,它返回一个数组(不同的数据)更多的计算要做!但是 pathinfo($img, PATHINFO_EXTENSION) 呢?这是计算所有数据,还是只执行一个获取信息的方法
    【解决方案2】:

    您可以使用 . 分解字符串,然后取最后一个数组项:

    $filename = "file.m.e.ext";
    $filenameitems = explode(".", $filename);
    
    echo $filenameitems[count($filenameitems) - 1]; // .ext
    // or echo $filenameitem[-1];
    

    【讨论】:

    • filename.tar.gz 呢?
    【解决方案3】:

    您可以使用路径信息查询。

    $info = pathinfo($file);
    

    在哪里

    $info['extension']
    

    包含扩展名

    【讨论】:

      【解决方案4】:

      有很多方法可以做到这一点,即使用 explode() 或使用 preg_match 等。

      但我这样做的方式是with pathinfo:

      $path_info = pathinfo($filename);
      
      echo $path_info['extension'], "\n";
      

      【讨论】:

        【解决方案5】:

        你想使用正则表达式:

        preg_match('/\.([^\.]+)$/', $filename);
        

        您可以通过here 对其进行测试,看看它是否能根据您的输入得到您想要的结果。

        【讨论】:

        • 我不太关心你的回答,因为有几个本机选项可以解决这个问题,但为漂亮的在线 reg-ex 测试员 +1 了!
        【解决方案6】:

        见answer:

        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        

        【讨论】:

        • 哪个更快? ($imgname, strlen($imgname) - 4, 4);或 pathinfo($filename, PATHINFO_EXTENSION);
        • @zPuls3 pathinfo($filename, PATHINFO_EXTENSION); 更准确,因为可能的扩展长度不同。
        猜你喜欢
        • 2011-09-14
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        相关资源
        最近更新 更多