如何使用__dir__?

How to use __dir__?

我想使用 __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__ 获取当前脚本的目录。 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";

我一直在寻求使用在 apache 的根 htdocs 中执行的 _DIR_ 变量,并能够包含其他包含敏感数据的脚本,例如位于它之外的数据库登录凭据.我在尝试不同的选项时遇到了一些困难,但下面的选项运行得非常好。

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

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

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

php_value auto_prepend_file     "globals.php"

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

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

define('DIR', __DIR__);

然后在每个文件中我现在能够动态地 include/require 必要的文件:

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.

现在,我想访问一个 php 文件,它位于我的 apache 的 htdocs 根文件夹之外,也可以通过以下方式轻松实现:

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