好的,我正在url / admin为我的自定义博客创建一个管理界面。
我是否可以使用相同的包含(包括自动加载)作为根目录。
如果可能的话,我还希望能够自动更正导航中的链接,以便当从/ admin访问时,它们会从/更改为../index.php中的index.php。
谢谢,Nico
答案 0 :(得分:19)
最佳做法是定义一个'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");
答案 1 :(得分:3)
最简单的方法是使用绝对路径/ 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
获取包含该文件的目录的路径(完整路径)。
有了这个,您就不必担心文件的相对路径。
答案 2 :(得分:0)
另一个答案类似于结合前两个建议。您可以定义常量:
define('ABSPATH', dirname(__FILE__).'/');
然后,假设config.php
需要包含在网站的许多文件中,那么您可以使用以下语句来完成此任务:
include(ABSPATH.'config.php');
希望这有帮助。
答案 3 :(得分:0)
我过去用于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网址时对我有帮助。