繁体   English   中英

使php包含在子目录中的工作

[英]Making php includes work in a sub-directory

好的,我正在url / admin为我的自定义博客创建一个管理界面。

我是否可以使用相同的包含(包括自动加载)作为根目录。

如果可能的话,我还希望能够自动更正导航中的链接,以便当从/ admin访问时,它们会从/更改为../index.php中的index.php。

谢谢,尼科

最佳做法是定义一个'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");

最简单的方法是使用绝对路径/ URL。

对于URL,在某处定义一个常量/变量,指向应用程序的根,如:

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

要么

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

并在每个链接中使用它,例如:

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

这样,总是好的(当你在另一台服务器或子目录中安装项目的那一天,你只需要修改一个常量/变量,一切仍然有效)

对于包含/要求,也总是使用绝对路径; 一个解决方案是使用dirname ,如下所示:

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

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

有了它,您永远不必担心文件的相对路径。

另一个答案类似于结合前两个建议。 你可以定义常量:

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

然后,假设config.php需要包含在站点的许多文件中,那么您可以使用以下语句来完成此任务:

include(ABSPATH.'config.php');

希望这可以帮助。

我过去用于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.");

    }
});

这在某些情况下有效,并且在我不想定义绝对的$ root url时对我有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM