У меня проблемы с моими файлами include. Кажется, я не могу понять, как создавать URL-адреса, когда я использую require_once ('somefile.php'). Если я попытаюсь использовать файл include в более чем одном месте, где структуры каталогов различны, я получаю сообщение об ошибке, что файл include не может быть найден.
В asp.net, чтобы получить корневой путь моего приложения, я могу использовать ~ / directory / file.aspx. Слабая косая черта всегда знает, что я ссылаюсь на корень моего сайта и нахожу файл независимо от того, где запрос поступает с моего сайта. Он всегда обращается к корню и ищет файл оттуда.
ВОПРОС: Как я могу получить корневой путь моего сайта? Как я могу сделать это, чтобы я мог повторно использовать свои файлы include из любого места моего сайта? Должен ли я использовать абсолютные пути в моих URL-адресах?
Спасибо!
Существует $_SERVER['DOCUMENT_ROOT']
который должен иметь корневой путь к вашему веб-серверу.
Изменить: если вы посмотрите на большинство основных php-программ. При использовании установщика вы обычно вводите полный путь к папке приложения. Установщик просто поместит это в файл конфигурации, который включен во все приложение. Один из вариантов – использовать файл автоматической подписи для установки переменной. другой вариант – просто include_once () конфигурационный файл на каждой странице, в которой вы нуждаетесь. Последний вариант, который я хотел бы предложить, – написать вам приложение, используя загрузку, в которой вы производите все запросы через один файл (обычно с url_rewrite). Это позволяет легко установить / включить конфигурационные переменные в одном месте и обеспечить их доступность во всех сценариях.
Обычно я храню файл config.php
в каталоге ROOT , а в config.php
пишу:
define('ROOT_DIR', __DIR__);
А затем просто используйте ROOT_DIR константу во всех других скриптах. Использование $_SERVER['DOCUMENT_ROOT']
не очень хорошо, потому что:
Приятно иметь возможность использовать один и тот же код в верхней части каждого скрипта и знать, что ваша страница будет загружаться должным образом, даже если вы находитесь в подкаталоге. Я использую это, полагаясь на то, что вы знаете, что называется корневой каталог (обычно это «htdocs» или «public_html»:
defined('SITEROOT') or define('SITEROOT', substr($_SERVER['DOCUMENT_ROOT'], 0, strrpos($_SERVER['DOCUMENT_ROOT'], 'public_html')) . 'public_html');
Если SITEROOT определяется последовательно, вы можете получить доступ к файлам конфигурации и / или страницам без адаптации путей по сценарию по сценарию, например, к файлу конфигурации, хранящемуся вне вашей корневой папки:
require_once SITEROOT . "/../config.php";
Вы должны использовать встроенные магические константы для поиска файлов. __FILE__
и __FILE__
. Если вы находитесь на PHP <5.3, вы должны использовать dirname(__FILE__)
Например
require_once __DIR__.'/../../include_me.php';
$_SERVER['DOCUMENT_ROOT']
не всегда гарантированно возвращает то, что вы ожидаете.
Определите его в файле конфигурации где-нибудь.
Предполагая, что вы используете стиль MVC, где все маршрутизируется через один index.php, тогда
realpath('.');
Покажет вам путь к текущему рабочему каталогу (т. Е. Где index.php)
Итак, вы можете определить это как
define('PROJECT_ROOT', realpath('.'));
Если это не MVC, и вам нужно, чтобы он работал с файлами в подпапках, вы можете просто скопировать его в файл конфигурации
define('PROJECT_ROOT', 'C:/wamp/www/mysite');
Затем, когда вы включаете что-то, что можете сделать;
include PROJECT_ROOT . '/path/to/include.php';
Вы можете альтернативно установить базовый каталог в файле .htaccess
SetEnv BASE_PATH C:/wamp/www/mysite/
Затем в PHP вы можете ссылаться на него с помощью $_SERVER['BASE_PATH']
Попробуй это:
$_SERVER['DOCUMENT_ROOT']