PHP,获取不带文件扩展名的文件名

2022-08-30 06:13:28

我有这个PHP代码:

function ShowFileExtension($filepath)
{
    preg_match('/[^?]*/', $filepath, $matches);
    $string = $matches[0];

    $pattern = preg_split('/\./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);

    if(count($pattern) > 1)
    {
        $filenamepart = $pattern[count($pattern)-1][0];
        preg_match('/[^?]*/', $filenamepart, $matches);
        return strtolower($matches[0]);
    }
}

如果我有一个名为 的文件,此函数返回 。my.zip.zip

我想做相反的事情,我希望函数在没有扩展的情况下返回。my

该文件只是变量中的字符串。


答案 1

不需要所有这些。查看 pathinfo(),它为您提供了路径的所有组件。

手册中的示例:

$path_parts = pathinfo('/www/htdocs/index.html');

echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // filename is only since PHP 5.2.0

代码输出:

/www/htdocs
index.html
html
index

或者,您只能获得某些部分,例如:

echo pathinfo('/www/htdocs/index.html', PATHINFO_EXTENSION); // outputs html

答案 2

作为 pathinfo() 的替代方法,您可以使用

来自 PHP 手册的示例

$path = "/home/httpd/html/index.php";
$file = basename($path);         // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"

但是,您必须知道扩展名才能提前将其删除。

但是,由于您的问题表明您需要获取扩展名基名,因此我将投票给Pekka的答案作为最有用的答案,因为它将为您提供有关路径和文件的任何信息。


推荐