На разных страницах на моем веб-сайте 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 \ в строке.
Поскольку вы находитесь в окнах, вам нужно использовать \ вместо /