繁体   English   中英

PHP:从路径中删除文件名

[英]PHP: remove filename from path

假设我有一条路径:images/alphabet/abc/23345.jpg

如何从路径末尾删除文件? 所以我最终得到:images/aphabet/abc/

你想要dirname()

<?php
    $path = pathinfo('images/alphabet/abc/23345.jpg');
    echo $path['dirname'];
?>

http://php.net/manual/en/function.pathinfo.php

dirname()只为您提供父文件夹的名称,因此dirname()将在pathinfo()不会失败的地方失败。

为此,您应该使用pathinfo()

$dirname = pathinfo('images/alphabet/abc/23345.jpg', PATHINFO_DIRNAME);

PATHINFO_DIRNAME告诉pathinfo直接返回dirname

看一些例子:

  • 对于路径images/alphabet/abc/23345.jpg ,两者都有效:

     <?php $dirname = dirname('images/alphabet/abc/23345.jpg'); // $dirname === 'images/alphabet/abc/' $dirname = pathinfo('images/alphabet/abc/23345.jpg', PATHINFO_DIRNAME); // $dirname === 'images/alphabet/abc/'
  • 对于路径images/alphabet/abc/ ,其中dirname失败:

     <?php $dirname = dirname('images/alphabet/abc/'); // $dirname === 'images/alphabet/' $dirname = pathinfo('images/alphabet/abc/', PATHINFO_DIRNAME); // $dirname === 'images/alphabet/abc/'

请注意,当字符串仅包含没有路径的文件名时(例如"test.txt" ), dirname()pathinfo()函数返回一个点 ( "." ) 作为目录,而不是空字符串。 如果您的字符串以"/"结尾,即当字符串仅包含没有文件名的路径时,这些函数将忽略此结尾斜杠并返回父目录。 在某些情况下,这可能是不受欢迎的行为,您需要使用其他东西。 例如,如果您的路径可能只包含正斜杠"/" ,即只有一个变体(不是斜杠"/"和反斜杠"\" ),那么您可以使用这个 function:

function stripFileName(string $path): string
{
    if (($pos = strrpos($path, '/')) !== false) {
        return substr($path, 0, $pos);
    } else {
        return '';
    }
}

或者同样的东西更短,但不太清楚:

function stripFileName(string $path): string
{
    return substr($path, 0, (int) strrpos($path, '/'));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM