之前检查项目代码时,有个同事在调了老半天代码都没解决到问题,后来一检查发现是
__FILE__和$_SERVER['SCRIPT_FILENAME'] 搞不清的缘故。
众所周知,在PHP中,魔术变量 _ _ FILE_ _和$_SERVER[‘SCRIPT_FILENAME’]都会返回PHP文件的完整路径,也就是
我们所常说的绝对路径。
比如在一个文件存在于 http://localhost/a.php,在a.php文件中有如下代码:
echo __FILE__.PHP_EOL; // C:\www\a.php
echo $_SERVER['SCRIPT_FILENAME'].PHP_EOL; //C:/www/a.php
但当php文件中含有include或require时则不一样了,比如我在www目录下新建一个inc的文件夹,里面有一个inc.php,有如下代码:
echo '__FILE__ is: '.__FILE__.PHP_EOL;
echo 'SCRIPT_FILENAME is: '.$_SERVER['SCRIPT_FILENAME'].PHP_EOL;
然后在a.php里面添加如下代码:
include 'inc/inc.php';
输出:
//__FILE__ is: c:\www\inc\inc.php
//SCRIPT_FILENAME is: c:/www/a.php
_ FILE 与$_SERVER[‘SCRIPT_FILENAME’]最显著的区别在于 FILE _始终都是它写在哪,就代表哪个文件的位置,而后者则是表示当前执行文件的路径。