使PHP包括子目录工作(Making php includes work in a sub-dire

2019-06-26 18:25发布

好吧,我创建将网址/管理我的自定义博客的管理界面。

是否有可能对我来说,能够使用相同的包括(包括自动加载),作为根目录。

如果可能的话,我也想能够让他们去说的index.php在/变化从/管理员访问时../index.php自动校正导航的链接。

谢谢,尼科

Answer 1:

造成这种情况的最佳做法是定义一个包含一切位于下的目录“ABSOLUTE_PATH”不变。 在此之后,你可以简单地复制和粘贴的一切,因为它定义“完整”的路径,不从目录更改为目录。

define("ABS_PATH", $_SERVER['DOCUMENT_ROOT']);

or

define("ABS_PATH", dirname(__FILE__));
// This defines the path as the directory the file is in.

然后,在任何时候,你可以简单地做到这一点,包括文件

include(ABS_PATH . "/path/to/file");


Answer 2:

最简单的方法是使用绝对pathes /网址。

对于网址,定义一个常量/变量的地方,指向您的应用程序,像根:

define('ROOT_URL', 'http://www.example.com');

要么

$root_url = 'http://www.example.com';

而在每一个环节都使用它,比如:

<a href="{$root_url}/my-page.php">blah</a>

这样一来,始终OK(和一天你在另一台服务器上安装的项目,或子目录中,你只有一个常数/变量修改,一切仍然有效)

对于包括/要求,一定要使用绝对pathes过; 一个解决方案是使用dirname ,像这样:

include dirname(__FILE__) . '/my_file.php';
include dirname(__FILE__) . '/../my-other-file.php';

__FILE__是当前文件,你在哪里写这条线; dirname获取路径(完整路径),以包含该文件的目录。

就这样,你永远不必担心你的文件的相对路径。



Answer 3:

然而,另一种答案将类似于前两个建议合并。 你可以定义常量:

define('ABSPATH', dirname(__FILE__).'/');

然后,假设config.php需要被列入网站,那么你可以使用下面的语句来实现这一点的许多文件:

include(ABSPATH.'config.php');

希望这可以帮助。



Answer 4:

我已经在过去使用的functions.php另一种选择是一类自动加载。

//Class Autoloader
spl_autoload_register(function ($className) {

    $className = strtolower($className);
    $path = "includes/{$className}.php";

    if (file_exists($path)) {

        require_once($path);

    } else {

        die("The file {$className}.php could not be found.");

    }
});

这工作在某些情况下,一直帮助我过去的时候,我不希望定义一个绝对$根URL。



文章来源: Making php includes work in a sub-directory