Вот пример структуры каталогов:
-Root
index.php
-forms
-form.php
-include
-include.php
В моем index.php мне требуется form.php
require_once('forms/form.php');
в моем form.php Мне нужен файл include.php. Какое из следующего верно:
require_once('../include/include.php');
require_once('include/include.php');
Моя путаница исходит из идеи, что форма отображается в индексном файле, поэтому файлы, которые должны быть включены в форму, должны быть относительны к индексу (так как это то, где оно было показано), или оно должно быть относительным к себе независимо от того, где он отображается.
Правильно
require_once('include/include.php');
но он должен использовать абсолютный путь:
require_once(__DIR__.'/include/include.php');
__DIR__
работает с PHP 5.3.0. В более ранних версиях его эквивалент был dirname(__FILE__)
../include/include.php
Не правильно! Потому что это идет из файла индекса! так что другой будет правильным! Просто протестируйте и вы тоже это увидите
Вы можете использовать магическую константу __DIR__
, поэтому вам не нужно об этом думать, например
require_once(__DIR__ . '../include/include.php');
require_once(__DIR__ . '../include/include.php');
поскольку form.php находится внутри каталога форм, который является «родственным» для каталога include?
require
примерно такой же, какeval(file_get_contents(...))
- он сохраняет текущий контекст, который включает в себя текущий рабочий каталог.set_include_path
и определите константу, такую какPROJECT_ROOT
, и используйте пути относительно этой константы.