PHP: Правильный процесс включения / требования - PullRequest
0 голосов
/ 28 мая 2020

Я ищу лучший способ обработки относительных путей в PHP. Проблема, с которой я столкнулся, заключалась в том, чтобы включить файл из подкаталога, который также содержал файлы. Использование этого процесса привело к нарушению относительных путей. Чтобы решить эту проблему, нужно было изменить переменную (путь), если файл не существовал. Но по какой-то причине это не устраивает меня, поскольку я думаю, что должен быть лучший способ справиться с этим.

Пример:

ROOT/config/config.php

ROOT/includes/functions.php

ROOT/includes/header.php <- включает <code>functions.php и config.php

ROOT/index.php <- включает <code>header.php

ROOT/admin/index.php <--- также включает <code>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;

Хотя я достиг своей цели, я просто хочу двигаться вперед, используя лучшие практики и минимизировать небрежный подход.

1 Ответ

1 голос
/ 28 мая 2020

Хотя ваш проект достаточно прост (из того, что я вижу в вашем сообщении), вы можете определить константы пути в своем файле конфигурации, что упростит их переименование / замену, просто изменив имя каталога и значение константа.

Например:

<?php #index.php

define('ROOT', __dir__);
define('CONFIG_DIR', ROOT . DIRECTORY_SEPARATOR . 'config');
define('INCLUDES_DIR', ROOT . DIRECTORY_SEPARATOR . 'includes');

Для классов существует стандарт, который чаще всего используется и который настоятельно рекомендуется, и это стандарт автозагрузки PSR-4 , где у вас есть Namespace / SubNamespaces / ClassName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...