Есть ли руководство по ссылкам на пути в PHP? - PullRequest
0 голосов
/ 09 ноября 2008

Я знаю, как включить файлы, которые находятся в папках ниже по иерархии, но у меня проблемы с поиском пути назад. Я решил перейти с set_include_path к значениям по умолчанию для всех последующих включений относительно уровня пути 2, но не имею ни малейшего понятия, как его записать.

Есть ли где-нибудь руководство, в котором подробно описывается путь к PHP?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2008

Я склонен использовать dirname , чтобы получить текущий путь, а затем использовать его в качестве основы для расчета всех будущих имен путей.

Например,

$base = dirname( __FILE__ ); # Path to directory containing this file
include( "{$base}/includes/Common.php" ); # Kick off some magic
1 голос
/ 09 ноября 2008

вероятно, проще просто использовать абсолютный путь к ссылке:

set_include_path('/path/to/files');

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

в качестве примера, с примером структуры папок (/home/files):

index.php
test/
  test.php
test2/
  test2.php

// /home/files/index.php
include('test/test.php');

// /home/files/test/test.php
include('../test2/test2.php');

если вы вызываете index.php, он попытается включить следующие файлы:

/home/files/test/test.php // expected
/home/test2/test2.php // maybe not expected

что может быть не тем, что вы ожидаете. вызов test.php вызовет /home/files/test2/test.php, как и ожидалось.

В заключение, включение будет относительным по отношению к исходной точке вызова. чтобы уточнить, это влияет на set_include_path(), если оно также является относительным. Рассмотрим следующее (используя ту же структуру каталогов):

<?php
// location: /home/files/index.php
   set_include_path('../'); // our include path is now /home/

   include('files/test/test.php'); // try to include /home/files/test/test.php
   include('test2/test2.php'); // try to include /home/test2/test2.php
   include('../test3.php'); // try to include /test3.php
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...