getcwd和__DIR__之间有什么区别?

时间:2015-07-14 13:25:50

标签: php directory silex

DIR PHP docs中所述的魔术常量。 getcwd()只是根据PHP docs的当前工作目录。

我的用例是:

// this is my index.php file
require_once __DIR__ . '/vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->get('/{name}', function($name) use($app) {
    return $app->sendFile(__DIR__ . '/web/source/index.php');
});

我不完全理解为什么我需要这些机制,因为我应该能够使用相对路径。

然而,代码失败了。

2 个答案:

答案 0 :(得分:4)

我们假设您有脚本

<?php
echo __DIR__, ' | ', getcwd();
include 'subdir/foo.php';

它将作为主脚本执行(因为浏览器请求或它是php-cli调用的主脚本)。
subdir/foo.php之外,include是相同的。

主脚本的输出可能类似于

/path | /path

但主脚本包含的subdir/foo.php输出将为

/path/subdir | /path

__ DIR__反映了当前脚本文件所在的目录 但是include()没有改变当前的工作目录,所以getcwd()的输出仍然是/path

答案 1 :(得分:4)

__DIR__是当前正在执行的文件的位置。

getcwd()是正在执行的php文件的当前目录。请记住,您在服务器而不是客户端,需要注意您正在使用的目录。

这可能会改变。

有关此概念的更多信息,请参阅here