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

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


当前回答

虽然__FILE__和$_SERVER是最好的方法,但在某些情况下,这也是一种替代方法:

get_included_files();

它包含调用它的文件路径和所有其他包含。

其他回答

虽然__FILE__和$_SERVER是最好的方法,但在某些情况下,这也是一种替代方法:

get_included_files();

它包含调用它的文件路径和所有其他包含。

例子:

包含文件:config.php

<?php
  $file_name_one = basename($_SERVER['SCRIPT_FILENAME'], '.php');
  $file_name_two = basename(__FILE__, '.php');
?>

执行文件:index.php

<?php
  require('config.php');
  print $file_name_one."<br>\n"; // Result: index
  print $file_name_two."<br>\n"; // Result: config
?>

当你想让你的包含知道它在什么文件(即。实际请求的脚本名称),使用:

basename($_SERVER["SCRIPT_FILENAME"], '.php')

因为当你写入一个文件时,你通常知道它的名字。

编辑:正如Alec Teal所指出的,如果你使用符号链接,它将显示符号链接的名称。

只需使用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, '.'));
}

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

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