这里我以TP5框架做举例测试输出,网站所在服务器绝对路径为:/var/www/TP5
然后网站的入口文件改在网站项目根目录下,也就是 TP5/index.php
然后输出语句在 TP5/application/index/controller/Index.php 控制器中的index方法中输出
(1)__DIR__ 当前内容写在哪个文件就显示这个文件的绝对路径目录
如dump(__DIR__) 输出:/var/www/TP5/application/index/controller
(2)__FILE__ 当前内容写在哪个文件就显示这个文件的绝对路径目录+文件名
如dump(__FILE__) 输出:/var/www/TP5/application/index/controller/Index.php
(3)getcwd() :显示是 在哪个文件里调用此文件 的绝对路径目录,返回当前工作目录。
如dump(getcwd()) 输出: /var/www/TP5
(4)dirname() 函数返回路径中的目录部分,括号内需要写路径参数。
echo dirname("c:/testweb/home.php"); 输出:c:/testweb
echo dirname("/testweb/home/ceshi/"); 输出:/testweb/home
echo dirname("/testweb/home/ceshi"); 输出:/testweb/home
dirname(__DIR__) 因为上面看到__DIR__是/var/www/TP5/application/index/controller,所以输出:/var/www/TP5/application/index
dirname(__FILE__)和__DIR__比较:都是获取文件所在的绝对路径目录
__FILE__ 和 dirname() 函数从 PHP 4.0.2 就开始启用。
__DIR__ 变量则是 PHP5.3.0 新增的。
(5)$_SERVER['SCRIPT_FILENAME'] , 指向当前执行脚本的绝对路径;
有点类似 __FILE__ ,区别是 __FILE__是这句代码写在哪个文件就显示这个文件的绝对路径。
而$_SERVER['SCRIPT_FILENAME']是执行脚本的绝对路径。
举例:
a.php文件和common文件夹同级,假设都在根目录下。common文件夹下面有个b.php文件。
//a.php中代码
require 'common/b.php';
//b.php中代码
echo $_SERVER['SCRIPT_FILENAME'];
echo '<br />';
echo __FILE__;
执行a.php文件,输出结果是
/a.php
/common/b.php
(6)DIRECTORY_SEPARATOR,显示系统分隔符的命令。
在windows下路径分隔符是\,在linux上路径的分隔符是/,所以上面php常量可以解决系统不同的错误。
可以在文件路径后面拼接这个php常量就可以。
如定义某个路径:
define(‘ROOT’, __DIR__.'upload/');
为了不报错,可以这样写:
define(‘ROOT’, __DIR__.DIRECTORY_SEPARATOR.'upload/');