【问题标题】:What is the difference betweed getcwd and __DIR__?getcwd 和 __DIR__ 有什么区别?
【发布时间】:2015-07-14 13:25:50
【问题描述】:

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

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

但是,如果没有它,代码就会失败。

【问题讨论】:

  • __DIR__ 与当前php文件的目录有关; getcwd() 是当前工作目录....您可以包含 PHP 正在执行的目录之外的文件,或者您可以更改 PHP 正在执行的目录

标签: php directory silex


【解决方案1】:

假设你有脚本

<?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(当前工作目录)发生了什么变化。
  • chdir() 可以 - 但请远离它(除非您别无选择并且确切地知道自己在做什么)。如果我是您的代码审阅者,您将不得不为网络服务器项目中与 cwd 相关的任何事情提出理由(.. 不知道我是否可以担任该职位,强烈的意见较弱:-))
【解决方案2】:

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

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

这可能会改变。

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

【讨论】:

  • 如果您从同一位置运行脚本,getcwd() 和 DIR 将是相同的。 DIR 会更快一些,因为它不调用函数。
猜你喜欢
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
  • 2011-02-25
相关资源
最近更新 更多