Как отформатировать путь PHP include () как абсолютный (а не относительный)?

На разных страницах на моем веб-сайте PHP и в разных вложенных каталогах я хочу включить конкретный файл по пути относительно корня.

Какую единственную команду я могу наложить на обе эти страницы …

  http://www.example.com/pageone.php 
  http://www.example.com/somedirectory/pagetwo.php 

… включить эту страницу:

  http://www.example.com/includes/analytics.php 

Это не работает:

<?php include('/includes/analytics.php'); ?> 

Имеет ли значение, что это размещено в IIS на Windows?

Если вы укажете include () или require () (или версии * _once) абсолютное имя пути, этот файл будет включен. Абсолютный путь начинается с «/» в unix и с буквой диска и двоеточием в Windows.

Если вы укажете относительный путь (любой другой путь), PHP будет искать каталоги в значении конфигурации «include_path» по порядку, пока не будет найдено совпадение или больше нет каталогов для поиска.

Итак, короче говоря, чтобы включить абсолютное имя файла, укажите абсолютное имя файла. См. Также функцию realpath () .

Если вы хотите установить свой собственный, включите «root», посмотрите на этот вопрос (в частности, мой ответ, конечно 🙂

Вы можете просто использовать include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php"; include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php";

С точки зрения PHP root – это вершина файловой системы на веб-сервере, а не корень с точки зрения веб-браузера.

Большинство людей делают одно из приведенных ниже.

Определите константу в глобальном файле конфигурации и используйте ее в каждом запросе require / include.

Или они используют такой код.

 require_once realpath(dirname(__FILE__).'/config.php'); require_once realpath(dirname(__FILE__).'/lib/Database.php'); 

Использование экологических переменных может быть опасным в некоторых случаях и быть источником проблем безопасности.

Как говорит @Stefan Mai, PHP не имеет «корневого» пути, но вы можете определить его довольно легко – на большинстве сайтов есть страница, которая включается каждый раз (например, файл конфигурации), к которой вы можете добавить:

 define('ROOT', dirname(__FILE__)); 

Затем используйте ROOT. '/includes/analytics.php';

Что-то, что также весьма полезно, это директива auto_prepend, которую вы можете использовать в .htaccess на apache – не уверен в настройке ее на IIS (хотя вы можете иметь глобальную в PHP ini).

Я объединил вышеупомянутые предложения и придумал это.

В моем файле config.php я определяю ROOT как:

define('ROOT', $_SERVER['DOCUMENT_ROOT']);

Затем я использую его в моих файлах succeding:

include_once(ROOT."/someFile.php");

include_once(ROOT."/includes/someFile.php");

Используйте .., чтобы перейти в каталог. Итак, в pageone.php

 include 'includes/analytics.php'; 

в pagetwo.php

 include '../includes/analytics.php'; 

Насколько я знаю, понятия «root» не существует, поскольку вы имеете в виду PHP, хотя вы можете определить его, если хотите. Удачи!

Это работает.

 <?php include('c:/inetpub/example.com/includes/analytics.php'); ?> 

Мне нужно сделать c:/inetpub/example.com/ частью какую-то глобальную переменную, поэтому она несколько переносима с сервера на сервер.

Тильда интерпретируется как специальный символ оболочкой, поэтому ее использование внутри PHP-кода не будет работать независимо от ОС.

Если вы пытаетесь получить доступ к чему-то относительно домашнего каталога пользователя, вы можете попробовать getenv() – я уверен, что Windows устанавливает переменную окружения, эквивалентную $HOME .

Я нашел:

 <?php include $_SERVER['DOCUMENT_ROOT'].'\\Your\\Site\\Path.php' ?> 

\\ необходимо, если у вас есть специальный символ, который может быть экранирован (т. Е. \ N), так что \\ is \ в строке.

Поскольку вы находитесь в окнах, вам нужно использовать \ вместо /