【问题标题】:PHP: Getting the include/require process rightPHP:正确获取 include/require 过程
【发布时间】:2020-05-28 23:55:40
【问题描述】:

我正在寻找一种更好的方法来处理 PHP 中的相对路径。我遇到的一个问题是包含来自子目录的文件,该文件也包含文件。使用此过程会导致相对路径中断。如果文件不存在,则通过更改变量(路径)来缓解此问题。但是,出于某种原因,我觉得它并不能很好地解决,因为我认为必须有更好的方法来处理这个问题。

示例:

ROOT/config/config.php

ROOT/includes/functions.php

ROOT/includes/header.php functions.php 和config.php

ROOT/index.php header.php

ROOT/admin/index.php header.php(如../includes/header.php)并具有以下代码来修复损坏的链接

下面是我使用的确实解决了问题的代码,但我只是在验证这是否可行,或者是否有更好的方法来处理相对文件路径。

    define('PREV_DIR', '../');

    $config_file = './config/config.php';
    $functions_file = './includes/functions.php';

    if ( !file_exists($config_file)) {
        $config_file = PREV_DIR . './config/config.php';
    }

    if ( !file_exists($functions_file)) {
        $functions_file = PREV_DIR . './config/config.php';
    }    

    include $config_file;
    include $functions_file;

虽然我已经实现了我的目标,但我只想继续采用最佳实践并尽量减少草率的做法。

【问题讨论】:

    标签: php optimization


    【解决方案1】:

    虽然您的项目很简单(从我在您的帖子中可以看到),但您可以在配置文件中定义路径常量,从而更简单地通过更改目录名称和值来重命名/替换它们常数。

    例如:

    <?php #index.php
    
    define('ROOT', __dir__);
    define('CONFIG_DIR', ROOT . DIRECTORY_SEPARATOR . 'config');
    define('INCLUDES_DIR', ROOT . DIRECTORY_SEPARATOR . 'includes');
    

    对于类,有一个最常用且强烈推荐的标准,那就是PSR-4 Autoload standard,其中有命名空间/子命名空间/类名。

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 2016-07-03
      • 2017-05-07
      • 1970-01-01
      • 2014-03-02
      • 2012-07-08
      • 1970-01-01
      • 2017-11-04
      • 2012-01-18
      相关资源
      最近更新 更多