href — публичный URL страницы PHP

При доступе

www.example.com/test1/test2/index.php

(файл /var/www/website1/test1/test2/index.php на сервере)

мы получаем:

<base href="<?php echo __DIR__; ?>">
// bad:  <base href="/var/www/website1/test1/test2/">

<base href="<?php echo dirname($_SERVER['REQUEST_URI']); ?>">
// bad: <base href="/test1/test2">
//      a <base href> dir must end with a / (or \ on Windows)

<base href="<?php echo rtrim(dirname(parse_url($_SERVER['PHP_SELF'], PHP_URL_PATH)), '/') . '/'; ?>">
// good:  <base href="/test1/test2/">

Последнее решение работает (*), но я нахожу его немного грязным / взломать. Есть ли более чистое решение для установки <base href="..."> текущий каталог PHP-файла?

(*) На самом деле, последнее решение не работает для серверов Windows, потому что добавление «/» ломает <base href> (так должно быть ‘\’).

2

Решение

dirname($_SERVER['SCRIPT_NAME']);

Должно сработать. В противном случае сделайте это:

В PHP < 5.3:

substr(dirname(__FILE__), strlen($_SERVER['DOCUMENT_ROOT']));

Или PHP> = 5.3:

substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']));

Обновление на основе ваших комментариев:

Используйте решение, которое работает на linux, если скрипт работает в Windows, измените путь соответствующим образом.

Определение серверной ОС:

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}

ИЛИ ЖЕ

if (DIRECTORY_SEPARATOR == '/') {
// linux
}

if (DIRECTORY_SEPARATOR == '\\') {
// windows
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector