2015-06-05 2 views
-2

Я действительно смущен о PHP и системе путей.PHP и пути - относительно файла и не включая код

У меня есть эта структура:

- Includes 
- Login 
- View 
    * Secure 

Это все каталоги на моем сайте. Теперь, если я поместить файлы в папке «View», я могу получить доступ к файлам в моем Включает папку с:

"../Includes/file.php" 

Если я хочу, чтобы включить один и тот же файл из защищенного каталога, я хотел бы сделать:

"../../Includes/file.php" 

Все в порядке, но вот здесь мне становится сложно.

Если файл, который я пытаюсь импортировать (файл.php в каталоге Includes), ТАКЖЕ включает файл, он все выкинет. Говорят, что файл будет включать файл в «Логин», он должен был бы быть одним из них 2 включает в себя, все в зависимости от того, если код, который включает в себя это находится в защищенной или Посмотреть каталог:

"../Login/file.php" -> if it was included from the View directory 
"../../Login/file.php" -> if it was included from the Secure directory. 

Очевидно, что эта проблема только становится все хуже и хуже. Может быть, то, что мне нужно, - это путь к тому, чтобы путь был относительно самого FILE, а не код?

На другой заметке, я догадываюсь, что я действительно нахожусь, как обрабатывать все это, включая «ад» в PHP? Я чувствую, что я связываю свою структуру плотно и что я не могу сильно изменить, не нарушая все. Поэтому любые советы о том, как справиться с этим, очень ценятся.

ответ

1

Существует два типа путей: относительный и абсолютный. Абсолютные пути начинаются с /.. (или C:/.. или, однако, работает в Windows) и всегда однозначно указывают на один конкретный файл.

Относительные пути (не от /) относятся к переменной include_path. Это переменная, содержащая множество папок, где PHP будет искать ваш относительный путь. То, что include_path также включает ., текущий. «Текущий» каталог зависит от того, какой файл был «первым», который должен быть выполнен. Так что это зависит от того, какой файл начинается с include.

  1. Вы можете указать set your include_path в какой-либо конкретный, неизменный каталог, поэтому у вас всегда есть фиксированный путь для включения относительно.
  2. Лучше:построить абсолютные пути:

    include __DIR__ . '/../Login/file.php'; 
    

    Это всегда по отношению к директории файл находится в

+0

Таким образом, вы фактически рекомендуем строить абсолютные пути, хотя. явным недостатком является более высокая связь между вашими файлами? Кроме того, __DIR__ не является жизнеспособным решением самостоятельно, так как он не начинается в веб-каталоге сайтов, он идет дальше. Кроме того, я предполагаю, что вы отклонили мой вопрос из-за отсутствия форматирования. Я исправлю это в будущем. Если есть еще одна причина, дайте мне знать. –

+0

Вы не можете иметь свой торт и съесть его тоже.:) Пути либо связаны с фиксированным корнем с установкой 'include_path', либо относительно друг друга с помощью' __DIR__'. В любом случае вам придется отредактировать кучу файлов, если вы когда-либо измените структуру своего каталога. - Чтобы избежать этого, вы должны использовать классы и автозагрузку; хотя это все равно означает, что вы отредактируете кучу имен пространства имен, если вы измените структуру каталогов. – deceze

+0

Но разве обе не представляют собой ужасную среду для больших проектов? Если я сделаю его относительно include_path, мне придется (насколько я понимаю) установить include_path для скрипта EACH. Если позже я решит изменить его, мне нужно пройти через каждый файл и изменить его. Опять же, если я использую __DIR__, существует большая проблема в том, что он не запускается в каталоге веб-сайта, он идет еще дальше. Например, на localhost __DIR__ будет «Applications/MAMP/htdocs/mySite» вместо «mySite». –

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