快速新秀问题。我搜索了SO的答案,但我发现的并不是很清楚或解决了我的特定问题,因为你可以看到here和here。
我尝试在不同的目录中添加脚本,但这会导致我的所有require()
路径出错。
如果可能的话,如何移动文件/更改目录而不必修改我的require()
语句?
我相信__DIR__
正是我所寻找的pointed out in this question,但在链接问题中,答案使用的是__FILE__
而非__DIR__
,我不太明白......?
示例
考虑一下,我当前的工作目录
require_once '../config/connection.php';
require_once '../views/head.php';
require_once'../classes/register.php';
:
:MORE CODE
如果我将require
声明移至 脚本 目录,如图中所示,将导致找不到错误。
除了在每个../
语句中追加另外2 require()
之外,我是否可以避免这种情况。
希望我的问题有道理......?是否有可能做我想要实现的目标?
感谢名单
答案 0 :(得分:1)
如果您使用的是spl_autoload_register
,那么您可以指定不同的位置来搜索类,
spl_autoload_register(function ($class) {
if (file_exists('some/location/' . $class . '.php')) {
// Require!
} else if (file_exists('some/other/location/' . $class . '.php')) {
// Require!
}
});
通过这种方式,您可以创建向后兼容性并优雅地更改结构,直到您确定某个位置中不存在任何文件,然后可以从自动装载器中删除条件。
我从未使用__autoload
的原因:
警告自PHP 7.2.0起,此功能已被弃用。非常不鼓励依赖此功能。
或者您可以在DIR的根目录下使用define
,
define('ROOT', __DIR__);
然后在需要访问文件时调用它,
ROOT/path/to/location/from/root.php
阅读材料
Is there any difference between __DIR__ and dirname(__FILE__) in PHP?
答案 1 :(得分:1)
可以提供帮助
<?php
define('ROOT', '/absolute/path/to/your/root/folder/');
require_once ROOT . 'config/connection.php';
require_once ROOT . 'views/head.php';
require_once ROOT . 'classes/register.php';