2015-04-18 2 views
2

При доступеPublic 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>.

+0

Какое значение вам нужно? неясно, на ваш вопрос. –

+0

@PedroLobito Я хочу установить '' текущий каталог файла PHP (этот каталог должен заканчиваться '/' или '\' в зависимости от формы) – Basj

+0

Проверьте мой ответ, из 3 вариантов работы для вас? –

ответ

0
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, соответствующим образом измените путь.

Deteting ОС сервера:

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

Проблема в том, что для того, чтобы быть ' ', нам нужна обратная косая черта или протирка – Basj