PHP自动更改需要目录

时间:2017-09-13 16:11:31

标签: php

快速新秀问题。我搜索了SO的答案,但我发现的并不是很清楚或解决了我的特定问题,因为你可以看到herehere

我尝试在不同的目录中添加脚本,但这会导致我的所有require()路径出错。

如果可能的话,如何移动文件/更改目录而不必修改我的require()语句?

我相信__DIR__正是我所寻找的pointed out in this question,但在链接问题中,答案使用的是__FILE__而非__DIR__,我不太明白......?

示例

考虑一下,我当前的工作目录

enter image description here

require_once '../config/connection.php'; require_once '../views/head.php'; require_once'../classes/register.php';

: :MORE CODE

如果我将require声明移至 脚本 目录,如图中所示,将导致找不到错误。

除了在每个../语句中追加另外2 require()之外,我是否可以避免这种情况。

希望我的问题有道理......?是否有可能做我想要实现的目标?

感谢名单

2 个答案:

答案 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';