PHP,获取没有文件扩展名的文件名

我有这个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没有扩展名。

该文件只是一个variables中的string。

没有必要这一切。 检查出pathinfo() ,它给你所有的path组件。

手册中的示例:

 $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 

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

  • basename() – 返回path的文件名组件

来自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的答案投票为最有用的答案 ,因为它会给您提供关于path和文件的任何信息,只需一个本地function。

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

 pathinfo($path, PATHINFO_FILENAME); 

简单的functiontesting: http : //ideone.com/POhIDC

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

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

这从上一个时期删除. 直到string结尾。

@戈登basename将工作正常,如果你知道扩展名,如果你不能使用爆炸:

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

如果扩展名未知,请使用此解决scheme

  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" 

PHP MAN函数pathinfo

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

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

在我的情况下,我使用下面。 我不在乎它的延伸。 :D我认为这会帮助你

 $exploded_filepath = explode(".", $filepath_or_URL); $extension = end($exploded_filepath); echo basename($filepath_or_URL, ".".$extension ); //will print out the the name without extension. 

几乎所有的上述解决scheme都显示从variables$ path获取文件名

下面的代码片段将获得当前执行的文件名称,不带扩展名

 echo pathinfo(basename($_SERVER['SCRIPT_NAME']), PATHINFO_FILENAME); 

说明

$ _SERVER ['SCRIPT_NAME']包含当前脚本的path。

 echo pathinfo(__FILE__)['filename']; // since php 5.2 

不知道该扩展名时没有文件扩展名的文件名:

$basename = substr($filename, 0, strrpos($filename, "."));

如果你不知道你有什么扩展名,那么你可以试试这个:

 $ext = strtolower(substr('yourFileName.ext', strrpos('yourFileName.ext', '.') + 1)); echo basename('yourFileName.ext','.'.$ext); // output: "youFileName" only 

处理所有可能性:

 image.jpg // output: "image" filename.image.png // output: "filename.image" index.php // output: "index" 

你可以写这个

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

这些将返回数组的当前元素,如果以前不使用。

您的答案是隐藏在PHP文件扩展名的完美解决scheme。

 <?php $path = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; echo basename($path, ".php"); ?> 

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

 $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"