如果我有PHP脚本,我怎么能得到当前执行的文件没有其扩展名的文件名?
给定一个格式为“jquery.js.php"”的脚本名称,如何仅提取“jquery.js"部分?
只需使用PHP神奇常数 __FILE__来获取当前文件名。
__FILE__
但似乎你想要没有.php的部分。所以…
.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"]));
看到http://php.net/manual/en/function.pathinfo.php
pathinfo(__FILE__, PATHINFO_FILENAME);
当你想让你的包含知道它在什么文件(即。实际请求的脚本名称),使用:
basename($_SERVER["SCRIPT_FILENAME"], '.php')
因为当你写入一个文件时,你通常知道它的名字。
编辑:正如Alec Teal所指出的,如果你使用符号链接,它将显示符号链接的名称。
下面是basename(__FILE__, ".php")和basename($_SERVER['REQUEST_URI'], ".php")之间的区别。
basename(__FILE__, ".php")
basename($_SERVER['REQUEST_URI'], ".php")
basename(__FILE__, ".php")显示了包含该代码的文件名称——这意味着如果你在header。php中包含此代码并且当前页面是index . php,它将返回头而不是指数。
basename($_SERVER["REQUEST_URI"], ".php") -如果你在header。php中使用include this code并且当前页面是index . php,它将返回指数而不是头。
basename($_SERVER["REQUEST_URI"], ".php")
这可能会有帮助:
basename($_SERVER['PHP_SELF'])
即使使用include,它也能工作。
你也可以用这个:
echo $pageName = basename($_SERVER['SCRIPT_NAME']);
$filename = "jquery.js.php"; $ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php $file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js
更通用的方法是使用pathinfo ()。从5.2版本开始,它支持PATHINFO_FILENAME。
PATHINFO_FILENAME
所以
pathinfo(__FILE__,PATHINFO_FILENAME)
也会做你需要的事。
__FILE__使用基于localhost服务器结果的示例:
echo __FILE__; // C:\LocalServer\www\templates\page.php echo strrchr( __FILE__ , '\\' ); // \page.php echo substr( strrchr( __FILE__ , '\\' ), 1); // page.php echo basename(__FILE__, '.php'); // page
以下是我最近在寻找答案时发现的一个列表:
//self name with file extension echo basename(__FILE__) . '<br>'; //self name without file extension echo basename(__FILE__, '.php') . '<br>'; //self full url with file extension echo __FILE__ . '<br>'; //parent file parent folder name echo basename($_SERVER["REQUEST_URI"]) . '<br>'; //parent file parent folder name with //s echo $_SERVER["REQUEST_URI"] . '<br>'; // parent file name without file extension echo basename($_SERVER['PHP_SELF'], ".php") . '<br>'; // parent file name with file extension echo basename($_SERVER['PHP_SELF']) . '<br>'; // parent file relative url with file etension echo $_SERVER['PHP_SELF'] . '<br>'; // parent file name without file extension echo basename($_SERVER["SCRIPT_FILENAME"], '.php') . '<br>'; // parent file name with file extension echo basename($_SERVER["SCRIPT_FILENAME"]) . '<br>'; // parent file full url with file extension echo $_SERVER["SCRIPT_FILENAME"] . '<br>'; //self name without file extension echo pathinfo(__FILE__, PATHINFO_FILENAME) . '<br>'; //self file extension echo pathinfo(__FILE__, PATHINFO_EXTENSION) . '<br>'; // parent file name with file extension echo basename($_SERVER['SCRIPT_NAME']);
别忘了删除:)
<br>
正如一些人所说,basename($_SERVER["SCRIPT_FILENAME"], '.php')和basename( __FILE__, '.php')是测试这一点的好方法。
basename( __FILE__, '.php')
对我来说,使用第二种方法是我所做的一些验证说明的解决方案
$ argv [0]
我发现使用$argv[0]更简单。执行脚本的名称总是$argv数组中的第一个元素。与其他答案中建议的所有其他方法不同,此方法不需要使用basename()来删除目录树。例如:
$argv[0]
$argv
basename()
echo __FILE__;返回类似/my/directory/path/my_script.php的值
echo __FILE__;
/my/directory/path/my_script.php
echo $argv[0];返回my_script.php\
echo $argv[0];
my_script.php
更新:
@Martin指出$argv[0]的行为在运行CLI时发生了变化。php.net上关于$argv的信息页面显示:
第一个参数$argv[0]始终是用于运行脚本的名称。
然而,六年前(在这篇编辑的时候)的一条评论说,
有时$argv可以为空,例如当“register-argc-argv"设置为false。在某些情况下,我发现变量在运行“php-cli”时是正确填充的;而不仅仅是"php"从命令行(或cron)。
请注意,根据文本的语法,我预计注释作者的意思是说变量在运行“;php-cli."我可以把这些话强加给评论者,但在某些情况下,函数偶尔会正确地运行,这似乎很有趣。😁
试试这个
$current_file_name = $_SERVER['PHP_SELF']; echo $current_file_name;
这适用于我,即使在包含的PHP文件中运行,并且您希望当前PHP文件的文件名正在运行:
$currentPage= $_SERVER["SCRIPT_NAME"]; $currentPage = substr($currentPage, 1); echo $currentPage;
结果:
index . php
$file = basename($_SERVER['PATH_INFO']);//Filename requested
虽然__FILE__和$_SERVER是最好的方法,但在某些情况下,这也是一种替代方法:
$_SERVER
get_included_files();
它包含调用它的文件路径和所有其他包含。
例子:
include File: config.php
config.php
<?php $file_name_one = basename($_SERVER['SCRIPT_FILENAME'], '.php'); $file_name_two = basename(__FILE__, '.php'); ?>
执行文件:index.php
index.php
<?php require('config.php'); print $file_name_one."<br>\n"; // Result: index print $file_name_two."<br>\n"; // Result: config ?>