如何使用__dir__?

时间:2015-09-12 09:56:24

标签: php dir

我想使用__dir__

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

它是否有效?

 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'; 

2 个答案:

答案 0 :(得分:41)

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

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

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

如果我们从include "inc/file1.php";开始index.php,它就能正常运作。但是,从file1.phpfile2.php,我们必须包含相对于index.php ,而不是来自file1.php(所以,include "inc/file2.php";)。 __DIR__已修复此问题,因此我们可以file1.php执行此操作:

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

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

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

答案 1 :(得分:0)

我一直在寻找使用在 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__);

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

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