Подтвердить что ты не робот

Как отформатировать путь 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?

4b9b3361

Ответ 1

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

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

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

Если вы хотите установить свой собственный, включите "root", посмотрите этот вопрос (в частности, мой ответ, конечно: -)

Ответ 2

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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

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

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

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

Ответ 6

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

include 'includes/analytics.php';

в pagetwo.php

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

Я нашел:

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

Требуется \\, когда у вас есть специальный символ, который может быть экранирован (т.е.\n), так что\\есть\в строке.

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