如何使用__dir__?

2022-08-30 10:15:22

我想使用 .__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'; 

答案 1

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

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

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

如果我们这样做,它将起作用。但是,从 到包含,我们必须相对于索引执行包含.php而不是从 (so, )。 修复了这个问题,所以从我们可以这样做:include "inc/file1.php";index.phpfile1.phpfile2.phpfile1.phpinclude "inc/file2.php";__DIR__file1.php

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

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

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

答案 2

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

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

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

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

php_value auto_prepend_file     "globals.php"

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

在我的全局.php apache 的 htdocs 文件中,我定义了一个名为 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');

推荐