2017-02-23 54 views
0

basename(__ FILE__)是否有区别?和$ _SERVER ['SCRIPT_NAME']?

我只是看到人们经常使用的2之一,和Im不确定的,如果它的事项要使用哪一个。我当然试过他们,他们似乎输出了同样的东西。就是想。 :)

回答

0
__FILE__ returns the filename of the script that is currently being run. 
dirname returns the directory of a given filename 
basename() returms the filename component of path. To put it better: it strips any "parent" directories off a given string. 

$_SERVER['SCRIPT_NAME']  Returns the path of the current script 

号两者都是same.They将返回同样的事情,但我认为$ _ SERVER [“SCRIPT_NAME”]是更好,因为它是小和PHP全局变量

0

是的,是有一定你需要考虑的重大差异。

一个用于获取包含脚本的完整路径(当前文件),另一个用于获取脚本路径(相对于Web服务器)。所以你可能会使用一个或另一个取决于你想要完成的事情。

所以它会在不同的格式返回不同的结果:

  • __FILE__C:\xampp\htdocs\project\myfileincluded.php
  • $_SERVER['SCRIPT_NAME']/project/index.php

__FILE__Magic constants的一部分,将返回的绝对路径目前包含文件。

$_SERVER['SCRIPT_NAME']Predefined server variables的一部分,它将返回最初在服务器中相对于服务器根路径调用的脚本的路径。

在记录消息或查看提取当前项目名称,分支名称等时,您可能想要使用__FILE__。当您要刷新页面时,可能需要使用$_SERVER['SCRIPT_NAME'],找出通话等。

在你的例子中,你正在使用basename(__FILE__),在这种情况下,将返回包含文件的名称。

0

__FILE__返回此命令最初所在的脚本名称。
$_SERVER['SCRIPT_NAME']返回调用此命令的脚本名称。例如,如果您有调用函数“ThisFile()”的“Script_A.php”,其中“ThisFile()”通过include_once在另一个“Script_B.php”中,则结果将会不同。

__FILE__ =>返回Script_B
$_SERVER['SCRIPT_NAME'] =>返回脚本A

0

不那么重要,但我认为这是值得注意的。请注意,也有$_SERVER['SCRIPT_FILENAME']

一个区别是他们返回包含的文件不同的路径:

  • __FILE__返回路径包含文件(其中__FILE__被调用)。
  • $_SERVER['SCRIPT_FILENAME']返回正在执行的脚本的路径(顶级脚本)。

但是,在基于Linux的系统和Apache web服务器上也可能存在差异,其中DocumentRoot是通过符号链接路径定义的。

对于我的网站例如真实路径是:

  • /mnt/data/www/mysite.org/

还有一个目录/www/其中位于此符号链接:

  • mysite.org

指向/mnt/data/www/mysite.org/

然后DocumentRoot(Apache的虚拟主机定义)配置为符号链接路径/www/mysite.org

在一些PHP脚本根本index.php设置:

  • __FILE__包含/mnt/data/www/mysite.org/index.php - 真实路径
  • $_SERVER['SCRIPT_FILENAME']包含/www/mysite.org/index.php - 符号链接路径
相关问题