Как мне требовать файлы в других ветках каталога? - PullRequest
1 голос
/ 31 октября 2010

Когда я пытаюсь использовать require или require_once, все будет работать нормально, если требуемый файл находится в том же подкаталоге, но в тот момент, когда он видит файл вне своего подкаталога, он генерирует фатальную ошибку.Вот как выглядит дерево файлов:

* main.php
+ login/
   * login.php
+ includes/
   * session.php

... поэтому, если мне нужно, чтобы main.php требовал login / login.php, все нормально, но если я попытаюсь сделать каталогОбратный путь для login.php, который требует include / session.php, завершается ошибкой, что приводит к ошибке:

Неустранимая ошибка PHP: require_once (): сбой открытия необходим [...]

код для этой концепции:

require('login/login.php') #works fine (main.php)
require('../includes/session.php') #quits (login.php)

Я пытался использовать $_SERVER('DOCUMENT_ROOT'), $_SERVER('SERVER_ADDR'), dir(_FILE_) и chdir(../).Я помню, как несколько месяцев назад работал над проектом, над которым я решил эту проблему, это была простая функция, которая пересекала пути к файлам, но я больше не могу ее найти.Есть идеи?

Ответы [ 2 ]

3 голосов
/ 31 октября 2010

Используйте set_include_path(), это сделает вашу жизнь намного проще.

1 голос
/ 31 октября 2010

Это не рекурсия, это просто старый обход каталога.

НИКОГДА не используйте относительные пути для include / require.Вы никогда не знаете, из какого каталога был вызван ваш скрипт, поэтому всегда есть вероятность, что вы окажетесь в неправильном рабочем каталоге.Это просто рецепт от головной боли.

ВСЕГДА используйте dirname(__FILE__), чтобы получить абсолютный путь к каталогу, в котором находится текущий файл.Если вы используете PHP 5.3, вы можете просто сделать __DIR__.(Обратите внимание на два подчеркивания спереди и сзади.)

require dirname(__FILE__).'/../includes/session.php';

(Кстати, вам не нужны круглые скобки, включающие / требуют, поскольку это языковая конструкция, а не функция.)

Использование абсолютных путей также может иметь лучшую производительность, потому что PHP не нужно изучать каждый каталог в include_path.(Но это применимо, только если у вас есть несколько каталогов в вашем include_path.)

...