getcwd和__DIR__之间有什么区别?

6

DIR 是一个魔术常量,如 PHP文档 所述。getcwd() 只是根据 PHP文档 当前的工作目录。

我的使用情况是:

// 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');
});

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

然而,如果没有它,代码将失败。


__DIR__关联到当前PHP文件的目录; getcwd()返回当前工作目录。你可以从PHP执行的目录外部包含文件,或者你可以更改PHP执行的目录。 - Mark Baker
2个回答

9

__DIR__ 表示当前执行的文件所在的目录。

getcwd() 返回 PHP 文件当前执行的目录。请注意,您正在服务器上而不是客户端,并且需要注意您正在从哪个目录工作。

这可能会发生变化。

有关此概念的更多信息,请参见此处


如果您从相同的位置运行脚本,则getcwd()和__DIR__将是相同的。但是,__DIR__会更快一些,因为它不调用函数。 - Wouter

8

假设您有该脚本

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


很酷,但我怎么知道是什么改变了当前工作目录(cwd)。 - Zen-Lee Chai
chdir()函数确实有用,但最好避免使用它(除非你别无选择并且确切知道自己在做什么)。如果我是你的代码审查人员,你很难为任何与当前工作目录相关的东西在Web服务器项目中辩护(...不过我不知道我能否坚持这个立场,强烈的意见却薄弱地持有 :-) )。 - VolkerK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接