include dirname(__FILE__).'/../../index.php';
тут вам найкраще зробити ставку, і це дозволить уникнути більшості відносних помилок шляху, з якими ви можете зіткнутися з іншими рішеннями.
Дійсно, це змусить включення завжди бути відносно позиції поточного сценарію, де розміщений цей код (яке розташування є, швидше за все, стабільним, оскільки ви визначаєте архітектуру вашого додатка). Це відрізняється від простого виконання, include '../../index.php'
яке включатиме відносно виконуючого (також званий "виклик") сценарію, а потім відносно поточного робочого каталогу , який вказуватиме на батьківський скрипт, що включає ваш сценарій, замість того, щоб вирішувати шлях із включеного сценарію .
З документації PHP:
Файли включаються на основі заданого шляху до файлу або, якщо такого не вказано, вказаного шляху include_path. Якщо файл не знайдено у include_path, include нарешті перевірить у власному каталозі викличного сценарію та поточному робочому каталозі перед збоєм.
І найстаріший допис, який я знайшов із посиланням на цей трюк, датується 2003 роком, Тапкен .
Ви можете протестувати за допомогою наступного налаштування:
Створіть такий макет:
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
В parent.php
, поставте:
<?php
include dirname(__FILE__).'/sub/included.php';
?>
В sub/included.php
, поставте:
<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>
Результат при доступі parent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
Як бачимо, у першому випадку шлях вирішується із викликаючого скрипта parent.php
, тоді як за допомогою dirname(__FILE__).'/path'
трюку включення здійснюється із сценарію, included.php
куди поміщений код.
Обережно, наступне НЕ еквівалентно трюку вище, на відміну від того, що можна прочитати деінде:
include '/../../index.php';
Справді, попереднє додавання /
буде працювати, але воно вирішиться так само, як include ../../index.php
із скрипта, що викликає (різниця полягає в тому, що include_path
він не буде розглядатися згодом, якщо він не вдасться). З PHP документ :
Якщо визначено шлях - абсолютний (починаючи з букви диска або \ у Windows, або / в системах Unix / Linux) або відносно поточного каталогу (починаючи з. Або ..) - шлях_включення буде ігноруватися взагалі.