Относительные URL-адреса в разных подпапках
Ищите способ, позволяющий моим ссылкам, URL-адресам и т. Д. Корректно работать на моем локальном компьютере и на моем действующем сайте.
Например, у меня есть файл common.php, который содержит соединение с БД.
У меня также есть файл init.php, который включен на каждой странице и внутри, который включает в себя файл common.php (среди прочих)
Сейчас я использовал
include './common.php';
Тем не менее, если я нахожусь на странице, например, веб / настройки
./ указывает на папку настроек.
Что я должен использовать в качестве относительного URL, который будет работать по всему сайту, независимо от того, какая папка и т. Д.?
3 ответа
Как насчет /
? Это относится к базе, и оттуда вы можете использовать абсолютный путь:
include "/absolute/path/to/file/common.php";
Относительный URL-адрес всегда зависит от текущего каталога, и вы не можете сделать его одинаковым, независимо от того, где вы находитесь на сайте. Вам нужно использовать абсолютные пути.
Вы могли бы использовать $_SERVER['DOCUMENT_ROOT']
за это.
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
// Now, you can specify your path relative to your DOCUMENT_ROOT.
include('common.php'); // Assuming your common.php file is in your root path.
Однако вам будет удобнее использовать пространства имен, так что вы можете пойти по этому пути.
Быстрый ответ для пути это.
__DIR__
= текущий рабочий каталог, так что если у вас архитектура типа MVC (единственная точка входа, то есть фронт-контроллер, в основном все начинается в одном файле, обычно index.php, а остальные включены), вы можете просто определить такую константу в этой основной файл.
define( 'BASE_PATH', __DIR__.'/' );
Так что если у вас есть, как это
root
index.php //define basepath
includes :
other.php
template :
temp.php
в другом вы можете просто сделать
include BASE_PATH . 'template/temp.php';
все будет связано с этим одним базовым набором в главном файле index.php, и пока папка, которую я поместил выше как root, содержит все, что вы можете перемещать туда, куда вы хотите из-за динамической части __DIR__
Длинный ответ - использовать автозагрузчик PSR-0, но это может быть немного излишним.
С другой стороны, если вы используете PHP < 5.3, используйте это вместо __DIR__
dirname(__FILE__)