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

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

351252 次浏览

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

作为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"

你必须知道扩展提前删除它。

然而,由于你的问题表明你需要得到扩展而且的基名,我投票佩的回答作为最有用的一个,因为它会给你任何信息,你想要的路径和文件与一个单一的本地函数。

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

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

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

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


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

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

pathinfo($path, PATHINFO_FILENAME);

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

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

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

这将从最后一个句点.移除,直到字符串的结尾。

不知道扩展名的文件名:

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

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

如果不知道扩展名,请使用此解决方案

 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 . sh / href="http://php.net/manual/function.pathinfo.php" rel="noreferrer">

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

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

在我的例子中,我使用下面。我不关心它的延伸是什么。: 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.

你可以这样写

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

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

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

你的答案是下面隐藏到php文件扩展名的完美解决方案。

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

几乎所有上述解决方案都显示从变量$path获取文件名

下面的代码段将获取当前执行的不带扩展名的文件名

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

解释

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

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

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

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

它会打印出来

logo

来源:删除扩展名,在PHP中只返回文件名

当扩展有多个部分时,现有的解决方案就会失败。下面的函数适用于多个部分,一个完整的路径或一个文件名:

function removeExt($path)
{
$basename = basename($path);
return strpos($basename, '.') === false ? $path : substr($path, 0, - strlen($basename) + strlen(explode('.', $basename)[0]));
}


echo removeExt('https://example.com/file.php');
// https://example.com/file
echo removeExt('https://example.com/file.tar.gz');
// https://example.com/file
echo removeExt('file.tar.gz');
// file
echo removeExt('file');
// file

文件扩展名提取:

File Name = subrotobiswas.jpg
$fileExtension = pathinfo($_FILES["fileToUpload"]["name"], PATHINFO_EXTENSION); //Output: jpg
$newNameOfFileWithoutExtension = basename( $_FILES["fileToUpload"]["name"], $fileExtension ); //Output: subrotobiswas
$fullFileName = $newNameOfFileWithoutExtension . "." .$fileExtension; // Output: subrotobiswas.jpg