获取当前脚本文件名

时间:2010-11-19 01:24:11

标签: php file

如果我有PHP脚本,如何从该脚本中获取文件名?

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

18 个答案:

答案 0 :(得分:365)

只需使用PHP magic constant __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"

使用标准字符串库函数是much quicker,正如您所期望的那样。

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

答案 1 :(得分:109)

如果您希望include知道它所在的文件(即实际请求的脚本名称),请使用:

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

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

编辑:如Alec Teal所述,如果您使用符号链接,它将显示符号链接名称。

答案 2 :(得分:61)

请参阅http://php.net/manual/en/function.pathinfo.php

pathinfo(__FILE__, PATHINFO_FILENAME);

答案 3 :(得分:52)

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

basename(__FILE__, ".php")显示包含此代码的文件的名称 - 这意味着如果您在 header.php 中包含此代码,并且当前页面为 index.php < / em>,它将返回标题而不是 index

basename($_SERVER["REQUEST_URI"], ".php") - 如果您在 header.php 中使用包含此代码且当前页面为 index.php ,则会返回 index 不是标题

答案 4 :(得分:25)

这可能会有所帮助:

basename($_SERVER['PHP_SELF'])

即使您使用include也会有效。

答案 5 :(得分:19)

亚历克斯的答案是正确的,但你也可以这样做,没有像这样的正则表达式:

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

答案 6 :(得分:12)

以下列出了我最近在寻找答案时发现的内容:

//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>

答案 7 :(得分:6)

你也可以用这个:

echo $pageName = basename($_SERVER['SCRIPT_NAME']);

答案 8 :(得分:4)

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

所以

pathinfo(__FILE__,PATHINFO_FILENAME)

也会做你需要的。

答案 9 :(得分:2)

这对我有用,即使在包含的PHP文件中运行,并且您希望运行当前php文件的文件名:

$currentPage= $_SERVER["SCRIPT_NAME"];
$currentPage = substr($currentPage, 1);
echo $currentPage;

结果:

  

index.php

答案 10 :(得分:1)

尝试一下

$file = basename($_SERVER['PATH_INFO']);//Filename requested

答案 11 :(得分:1)

<强> $的argv [0]

我发现使用$argv[0]要简单得多。执行脚本的名称始终是$argv数组中的第一个元素。与其他答案中建议的所有其他方法不同,此方法不需要使用basename()来删除目录树。例如:

  • echo __FILE__;返回/my/directory/path/my_script.php

  • 之类的内容
  • echo $argv[0];返回my_script.php

答案 12 :(得分:1)

试试这个

$current_file_name = $_SERVER['PHP_SELF'];
echo $current_file_name;

答案 13 :(得分:0)

示例:

包含的文件: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
?>

答案 14 :(得分:0)

虽然 __FILE__$_SERVER 是最好的方法,但在某些情况下也可以作为替代方法:

get_included_files();

它包含您从中调用它的文件路径以及所有其他包含。

答案 15 :(得分:0)

正如有些人所说,basename($_SERVER["SCRIPT_FILENAME"], '.php')basename( __FILE__, '.php')是衡量这一点的好方法。

对我来说,使用第二个是我正在制作的一些验证说明的解决方案

答案 16 :(得分:0)

__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

答案 17 :(得分:0)

$filename = "jquery.js.php";
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js