【问题标题】:How to use __dir__?如何使用__dir__?
【发布时间】:2015-12-08 20:12:21
【问题描述】:

我想使用__dir__

但是,我找不到任何关于如何设置它的好教程。我在 Dropbox 中有我的 htdocs。

它是这样工作的吗?

 define(__DIR___, 'd:documents/dropbox/yolo/swag/htdocs/myproject/test/newtest/
 testphp/test_new/testincludes/1/new_folder/')

这是我的项目所在的目录,它有子文件夹。我想将一个文件包含到父文件夹中的另一个文件中。

然后我应该输入:

 include'__DIR__/warlock.php'; 

或者我必须输入这样的内容吗?

 include '___DIR__/wow/newb/guidesfornabz/classes/casters/warlock.php'; 

【问题讨论】:

  • 我在另一个类似问题中发布了一个答案,它解释了使用 __DIR__ 的原因以及当我们在 include 或 require 中不使用 __DIR__ 时会发生什么。 stackoverflow.com/a/65976952/13976117

标签: php dir


【解决方案1】:

您可以使用__DIR__ 获取当前脚本的目录。它只在 PHP 5.3 之后出现,与使用dirname(__FILE__) 相同。在大多数情况下,它用于从包含的文件中包含另一个文件。

考虑在名为inc 的目录中有两个文件,这是我们项目目录的子文件夹,index.php 文件所在的位置。

project
├── inc
│   ├── file1.php
│   └── file2.php
└── index.php

如果我们从index.php 执行include "inc/file1.php";,它将起作用。然而,从file1.php 到包含file2.php,我们必须做一个包含相对于index.php 而不是从file1.php(所以,include "inc/file2.php";)。 __DIR__ 解决了这个问题,所以从 file1.php 我们可以这样做:

<?php
include __DIR__ . "/file2.php";

回答您的问题:包含文件warlock.php 位于您包含的文件的上层目录中,这是最好的解决方案:

<?php
include __DIR__ . "/../warlock.php";

【讨论】:

  • @Howl 我尝试在 file1.php 中包含“file2.php”。它工作正常。你能解释一下为什么“我们必须相对于 index.php 做一个包含”吗?
  • @SurajMalinga - 如果您转到 file1.php 并使用包含,则查看从 file1.php 到 file2.php 的路径以包含它。但是 DIR 允许我们在 file1.php 不是正在执行的文件时为 file1.php 提供到 file2.php 的正确路径。解释器正在查看项目文件夹内。然后,如果 file1 通过 include 调用 file2,解释器将首先在项目文件夹中查找 require('file2.php'),而不是 inc 文件夹。
  • 你不需要 DIR ,我认为 include './../warlock.php' 没有它应该可以正常工作
  • DIR 给出了 server_root 的路径,可能类似于 /var/www/somestuff/file1.php。根据实现,使用普通包含从应用程序的入口点查找文件,例如索引.php。如果您的文件位于距离那里 10 个子文件夹的位置,则不是很有帮助
【解决方案2】:

我一直在寻求使用在 apache 的根 htdocs _DIR_ 中执行的变量,并能够包含其他包含敏感数据的脚本,例如位于它之外的数据库登录凭据。我在尝试不同的选项时有点挣扎,但下面的效果非常好。

首先,在我的 apache 虚拟主机配置中,我设置/包含 apache 的 htdocs 的完整 linux 路径(您可以通过在末尾附加:/path/to/folder/ 添加更多路径):

php_value include_path          ".:/var/www/mywebsite.ext/uat/htdocs"

然后在 .htacess 中存储在 apache 的 htdocs 根目录(和 git repo)中:

php_value auto_prepend_file     "globals.php"

上述两项都可以在 .htacess 中设置,尽管它不适用于 DEV、UAT、PRODUCTION 等多种环境,尤其是在使用 git repo 时。

在我的 apache 的 htdocs 中的 globals.php 文件中,我定义了一个名为 DIR 的变量,它被 htdocs php 脚本全局使用:

define('DIR', __DIR__);

然后在每个文件中,我现在能够动态地包含/需要必要的文件:

require_once(DIR.'/file_folder_inside/apache's_htdocs/some-file.php');

DIR 变量将始终解析为 /var/www/mywebsite.ext/uat/htdocs,无论我在上面的生成示例中调用它在树中的哪个位置

/var/www/mywebsite.ext/uat/htdocs/file_folder_inside/apache's_htdocs/some-file.php.

现在,我正在寻找一个位于我的 apache 的 htdocs 根文件夹之外的 php 文件,这也可以通过以下方式轻松实现:

require_once(DIR.'/../apache's_htdocs_parent_folder/some-file-stored-outside-htdocs-eg-snesitive-credentials.php');

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 2021-11-06
    • 2014-08-24
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多