我有这样的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函数适用于所有扩展,像这样:

$path = "/home/httpd/html/index.php";
$ext = pathinfo($path, PATHINFO_EXTENSION);

$file = basename($path, ".".$ext); // $file is set to "index"

其他回答

如果文件名使用点,你可能会得到错误的输出。 我会使用@Gordon方法,但也获得扩展,所以basename函数适用于所有扩展,像这样:

$path = "/home/httpd/html/index.php";
$ext = pathinfo($path, PATHINFO_EXTENSION);

$file = basename($path, ".".$ext); // $file is set to "index"

在1行中只返回没有任何扩展名的文件名:

$path = "/etc/sudoers.php";    
print array_shift(explode(".", basename($path)));
// will print "sudoers"

$file = "file_name.php";    
print array_shift(explode(".", basename($file)));
// will print "file_name"

你可以这样写

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

如果之前没有使用,这些函数将返回当前数组元素。

没有必要编写大量的代码。甚至只需一行代码就可以完成。在这里看到的

下面是一行代码,只返回文件名并删除扩展名:

<?php
 echo pathinfo('logo.png')['filename'];
?>

它会打印出来

logo

源代码:删除扩展名,只返回PHP中的文件名

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

pathinfo($path, PATHINFO_FILENAME);

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