2013-02-25 2 views
0

Есть небольшая библиотека, которую я пытаюсь подключить к моему проекту. В этом lib есть несколько включений и требуется для разных классов, поэтому я пытаюсь установить путь включения для всего, что сработает.PHP: Почему мой `set_include_path()` работает при указании одного каталога?

При попытке установить путь включения от ветви сиблинга, я сталкиваюсь с икотой.

Для справки require('/../my/test.php') отлично работает.

Так же

set_include_path('/../'); 
require_once('my/test.php'); 

Но как только я пытаюсь

set_include_path('/../my/'); 
require_once('test.php'); 

я получаю:

Предупреждение: require_once (one.php): не удалось не удалось открыть поток: Нет такого файла или каталог в ...

Что мне не хватает?

+1

Не используйте относительные пути, как это, это очень легко испортить все. Обратитесь к ФАЙЛУ CURRENT с помощью 'dirname (__ FILE __)' и создайте относительные пути из этого в каждом отдельном файле. Просто мои предпочтения. Пример: 'require_once (dirname (__ FILE __). '/ ../my/test.php');' – Eggplant

ответ

5

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

Чтобы установить путь включения в родительский каталог текущего местоположения, вам нужно всего лишь ../. Чтобы сделать код более переносимым, я бы предложил объединить его с dirname(__FILE__), чтобы получить абсолютный путь к текущему каталогу.

IE:

set_include_path(dirname(__FILE__) . '/../my/'); 

Примечание предшествующее / требуется в этом примере, как dirname() не возвращает лидирующий слэш

+0

спасибо, я отмечу это как ответ, как только мне будет позволено. – mOrloff

+0

Использование 'dirname (__ FILE __)' для передачи его 'set_include_path()' является полным противоречием, на мой взгляд. То, что он задает, - это способ не беспокоить относительные пути в DIFFERENT файлах (файл A включает в себя файл B, который включает в себя файл C и т. Д.). См. Мой комментарий выше. – Eggplant

+1

Я знаю, я определенно не буду защищать 'set_include_path()' злоупотребление в проекте. OP лучше просто требовать от прямых путей. Однако возникает вопрос: «Почему мой« set_include_path() 'working» – Dunhamzzz

Смежные вопросы