我有这个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]);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我有一个名为的文件my.zip,则此函数返回.zip.
我想反过来,我希望函数在my没有扩展名的情况下返回.
该文件只是变量中的一个字符串.
小智 356
不需要这一切.检查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
Run Code Online (Sandbox Code Playgroud)
输出代码:
/www/htdocs
index.html
html
index
Run Code Online (Sandbox Code Playgroud)
或者你只能获得某些部分,如:
echo pathinfo('/www/htdocs/index.html', PATHINFO_EXTENSION); // outputs html
Run Code Online (Sandbox Code Playgroud)
Gor*_*don 191
作为替代方案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"
Run Code Online (Sandbox Code Playgroud)
你必须提前知道扩展名才能删除它.
但是,由于您的问题表明您需要获取扩展名和基本名称,我将Pekka的答案视为最有用的答案,因为它会为您提供有关路径和文件的任何信息,只需一个本机功能.
yck*_*art 62
https://php.net/manual/en/function.pathinfo.php
pathinfo($path, PATHINFO_FILENAME);
Run Code Online (Sandbox Code Playgroud)
简单的功能测试:https://ideone.com/POhIDC
cai*_*005 12
另一种方法是使用正则表达式.
$fileName = basename($filePath);
$fileNameNoExtension = preg_replace("/\.[^.]+$/", "", $fileName);
Run Code Online (Sandbox Code Playgroud)
这将从上一个句点中删除,.直到字符串结束.
any*_*asa 12
如果未知扩展名,请使用此解决方案
pathinfo('D:/dir1/dir2/fname', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.php', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_DIRNAME) . '/' . pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_FILENAME); // return "D:/dir1/dir2/fname"
Run Code Online (Sandbox Code Playgroud)
如果您知道扩展名,@ Gordon basename将正常工作,如果您不能使用explode:
$filename = end(explode(".", $file));
Run Code Online (Sandbox Code Playgroud)
几乎所有上述解决方案都显示了从变量$ path获取文件名
片段下方将获取当前执行的文件名而不包含扩展名
echo pathinfo(basename($_SERVER['SCRIPT_NAME']), PATHINFO_FILENAME);
Run Code Online (Sandbox Code Playgroud)
说明
$ _SERVER ['SCRIPT_NAME']包含当前脚本的路径.
没有必要编写大量代码.即使它只能通过一行代码完成.看到这里
下面是仅返回文件名的一行代码,并删除扩展名:
<?php
echo pathinfo('logo.png')['filename'];
?>
Run Code Online (Sandbox Code Playgroud)
它会打印出来
logo
Run Code Online (Sandbox Code Playgroud)