如何从当前脚本以外的基本路径包含PHP脚本


How do I include a PHP script from a base path other than the current script?

我试图包含一个PHP应用程序,但它会引起问题,因为我试图从子目录中包含它的文件。例如,以下是我尝试使用的目录结构(或多或少):

/site
    /scripts
        /local
            some_script.php
    lib_file_a.php
    lib_file_b.php
    lib_load.php

lib_load.php具有用于文件lib_file_a.phplib_file_b.php(相对路径)的include命令。

我想完成的是从some_script.php中包含lib_load.php,但包含lib_load.php的方式有问题。起初我尝试了require('../../../lib_load.php');

正如你所料,我看到了错误,"打开必需的C:''examplep''htdocs''site''scripts''local''lib_file_a.php失败"。正如你所看到的,php试图包含一个不存在的文件。我发现了一篇Stack Overflow的帖子,告诉我使用绝对路径(链接),但这并没有帮助。我下一次尝试这个代码:

require(realpath(dirname(__FILE__) . '../../../' . 'lib_load.php'));

然而,这一次,同样的错误又出现了。我做错了什么?

编辑:我意识到问题实际上是在库加载程序中,它包含了基于绝对路径而不是相对路径的文件。(我本应该更仔细地阅读的。)我通过改变图书馆使用的路径来解决这个问题。如果国防部看到这个请求,这个问题应该关闭。

包含lib加载

require $_SERVER['DOCUMENT_ROOT'] . '/scripts/lib_load.php';

库内加载

require dirname(__FILE__) . '/lib_file_a.php';

如果我解决了你的问题

试试这个:

require dirname(__FILE__) . '/../../../lib_load.php');

或者,如果你使用的是PHP 5.3或更高版本,请使用它(看起来更好):

require __DIR__ . '/../../../lib_load.php');