如果我有PHP脚本,我怎么能得到当前执行的文件没有其扩展名的文件名?

给定一个“jquery.js.php”形式的脚本的名称,我如何提取只是“jquery.js”部分?


当前回答

下面是basename(__FILE__, ".php")和basename($_SERVER['REQUEST_URI'], ".php")之间的区别。

basename(__FILE__, ".php")显示了包含此代码的文件名称-这意味着如果您在header.php中包含此代码并且当前页面是index.php,它将返回头文件而不是索引。

basename($_SERVER["REQUEST_URI"], ".php") -如果你在header.php中使用include这段代码,而当前页面是index.php,它将返回索引而不是头。

其他回答

只需使用PHP神奇常数__FILE__来获取当前文件名。

但你似乎想要没有。php的部分。所以…

basename(__FILE__, '.php'); 

一个更通用的文件扩展名删除程序应该是这样的…

function chopExtension($filename) {
    return pathinfo($filename, PATHINFO_FILENAME);
}

var_dump(chopExtension('bob.php')); // string(3) "bob"
var_dump(chopExtension('bob.i.have.dots.zip')); // string(15) "bob.i.have.dots"

如您所料,使用标准字符串库函数要快得多。

function chopExtension($filename) {
    return substr($filename, 0, strrpos($filename, '.'));
}

更通用的方法是使用pathinfo()。从5.2版本开始,它支持PATHINFO_FILENAME。

So

pathinfo(__FILE__,PATHINFO_FILENAME)

也会做你需要的事。

Alex的答案是正确的,但你也可以不使用正则表达式这样做:

str_replace(".php", "", basename($_SERVER["SCRIPT_NAME"]));

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

pathinfo(__FILE__, PATHINFO_FILENAME);

正如一些人所说,basename($_SERVER["SCRIPT_FILENAME"], '.php')和basename(__FILE__, '.php')是很好的测试方法。

对我来说,使用第二种方法是我所做的一些验证说明的解决方案