【问题标题】:Extract filename with extension from filepath string从文件路径字符串中提取带有扩展名的文件名
【发布时间】:2011-03-10 03:55:42
【问题描述】:

我希望从文件路径字符串的末尾获取文件名,比如说

$text = "bob/hello/myfile.zip";

我希望能够获取文件名,我猜这将涉及获取最后一个斜杠之后的所有内容作为子字符串。谁能帮助我如何做到这一点是PHP?一个简单的函数,如:

$fileName = getFileName($text);

【问题讨论】:

  • 查看:php.net 上的 strrchr(),或按照建议使用基本名称

标签: php substring filenames filepath text-extraction


【解决方案1】:

查看basename()

【讨论】:

    【解决方案2】:

    对于更一般的需求,启动参数使用负值。
    例如

    <?php
    $str = '001234567890';
    echo substr($str,-10,4);
    ?>
    

    将输出
    第1234章

    使用负参数表示从头到尾的第一个字符开始。

    【讨论】:

    • 虽然其他问题解决了真正的问题,但 OP 完美地回答了标题中的问题。谢谢,我很确定我只需要使用负数但想要确认。
    【解决方案3】:
    $text = "bob/hello/myfile.zip";
    $file_name = end(explode("/", $text));
    echo $file_name; // myfile.zip
    

    end() 返回给定数组的最后一个元素。

    【讨论】:

      【解决方案4】:

      正如 Daniel 所发布的,对于此应用程序,您希望使用 basename()。对于更一般的需求,strrchr() 完全符合本文标题的要求。

      http://us4.php.net/strrchr

      【讨论】:

        【解决方案5】:

        我想你可以使用 strrpos 找到最后一个'/',然后得到那个子字符串:

        $fileName = substr($text, strrpos($text, '/')+1);

        虽然您可能实际上想首先检查以确保其中有一个“/”。

        【讨论】:

        • 或者你可以使用 basename(),就像他们说的那样。这样更好。
        【解决方案6】:
        function getSubstringFromEnd(string $string, int $length)
        {
            return substr($string, strlen($string) - $length, $length);
        }
        
        function removeSubstringFromEnd(string $string, int $length)
        {
            return substr($string, 0, strlen($string) - $length);
        }
        
        echo getSubstringFromEnd("My long text", 4); // text
        echo removeSubstringFromEnd("My long text", 4); // My long
        

        【讨论】:

        • 请为您的答案添加一些解释。在我看来,您似乎不能简单地用它删除文件扩展名
        • @NicoHaase 我为此添加了一个方法。
        • 该代码是如何工作的?不是四个字符长的文件扩展名怎么办?如果在调用您的魔法函数之一之前不知道该扩展的长度,那它应该如何工作?
        猜你喜欢
        • 2011-12-08
        • 1970-01-01
        • 2012-10-06
        • 1970-01-01
        • 2021-11-20
        • 2013-06-02
        • 2012-10-11
        • 1970-01-01
        相关资源
        最近更新 更多