[英]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.