我有这样的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。

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


当前回答

@Gordon basename将工作很好,如果你知道扩展,如果你不知道,你可以使用爆炸:

$filename = end(explode(".", $file));

其他回答

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

pathinfo($path, PATHINFO_FILENAME);

简单功能测试:https://ideone.com/POhIDC

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

basename() -返回路径的文件名组件

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的答案是最有用的,因为它将为您提供有关路径和文件的任何信息,只需一个本地函数。

另一种方法是使用正则表达式。

$fileName = basename($filePath);
$fileNameNoExtension = preg_replace("/\.[^.]+$/", "", $fileName);

从最后一个周期中删除。一直到字符串的末尾。

没有必要做这些。检查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

不知道扩展名的文件名:

$basename = substr($filename, 0, strrpos($ fi里程碑,");