PHP dir/ файловая иерархия с "include" и (dirname(__FILE__) . "SOMETHING")
Спасибо за ваше время и внимание.
Я работаю с сайтом php, на котором я хочу добавить гостевую книгу, найденную в сети, которая работает без базы данных mySql.
Мой сайт структурирован так:
host.../myDir/fileA.php (here we have all the basic files of the site)
Первый файл Гостевой книги, который я бы интегрировал, находится здесь:
host.../myDir/gbook/gbook.php
В gbook dir есть еще один каталог, называемый шаблоном, который содержит все необходимое для графики (что очевидно).
Внутри файла A.php я вставил эту команду включения:
require_once "gbook/gbook.php";
А внутри gbook/gbook.php есть эта команда:
$settings['tpl_path'] = './templates/'.$settings['template'].'/';
Теперь я прочитал руководство по php для (include (dirname (FILE). '...')) и прочитал также ваше многократное объяснение этой команды, поэтому я проверил это:
$settingsBase['tpl_basepath'] = (dirname(__FILE__) . '/');
$settings['tpl_path'] = $settingsBase['tpl_basepath'].'templates/'.$settings['template'].'/';
Но это работает для интеграции, но не для графики. Так что это то, что я не понимаю, и что я понял.
Когда вы "включаете" файл в другой файл, компилятор считывает код как часть того же файла. Это проблема. Когда вы включаете что-то, находящееся в другом /dir, компилятор получает файл, но не всю структуру, поэтому, если внутри включаемого файла есть другое "включение", компилятор будет искать его в /dir, где находится файл включения. Правильный?
Значит, существует команда dirname(), верно? Я имею в виду, правильно ли использовать dirname(), чтобы сообщить компилятору, что я хочу включить этот файл /dir/file.php, и все, что будет после, и оно включено в этот первый файл, должно поддерживать ту же структуру /dir?
Так что, если есть эта структура:
host.../myDir/fileA.php
и этот файл содержит команду:
include gbook/fileB.php
и этот файл содержит команду:
include /template/all_the_other_files.php
и полная структура:
(1) host...
(2) /myDir (where_there's_site)
(3) /gbook (where_there's_base_gbook_structure)
(4) /template (where_there's_template)
(5) /others dir (where_there's_pics_smiles_etc...)
Как я могу сказать компилятору "эй, когда вы включаете gbook/gbook.php", все, что включено в gbook.php, должно быть найдено внутри хоста.../myDir/gbook/...?
Я знаю, что, возможно, это действительно просто для вас, но я пытаюсь преодолеть проблему и не могу понять базовое решение и объяснение проблемы.
Спасибо.
1 ответ
Прежде всего, я бы рекомендовал использовать require_once вместо include. Вызывает ошибку, если нужный файл не найден, и вам не нужно заботиться о нескольких включениях.
Я думаю, вам нужно использовать это только в вашем gbook/fileB.php:
require_once __DIR__ . /template/all_the_other_files.php;
Как видите, вы можете использовать магическую константу DIR в новых версиях PHP вместо dirname(FILE). Используя его, вы можете легко реализовать относительные пути. Надеюсь, это поможет.