Удалить корень документа из полного пути к серверу в PHP - PullRequest
1 голос
/ 30 июля 2010

ОК, я определил константу PHP, которая указывает на файл на сервере, вот так:

define('SOME_FILE', str_replace('//', '/', str_replace('\\', '/', dirname(__FILE__) . '/foo-bar.txt')));

SOME_FILE будет содержать полный путь + имя файла, которое можно использовать в таких функциях PHP, как include, fopen и т. Д. Теперь, если я хочу использовать этот путь в качестве URL-адреса в моем (X) выводе HTML, я Облажался Для этого мне нужно удалить корень документа.

Обычно $_SERVER['DOCUMENT_ROOT'] устанавливается в 99% сред PHP, но это может произойти, если он плохо сконфигурирован, перезаписан пользователем или даже отсутствует.

Теперь я хочу define() другую PHP-константу, основанную на SOME_FILE, которая будет указывать на фактический URL-адрес файла (корневой путь документа удаляется).

Я знаю, что могу сделать это в 3-4 строках кода с __FILE__, $_SERVER['SCRIPT_NAME'] (SCRIPT_NAME требуется согласно спецификации CGI 1.1, но не DOCUMENT_ROOT), strrpos и substr, но я ' ищу решение «в одну строку» для использования в операторе define ...

Я использую PHP 5.1.0+. Эми предложения приветствуются!

Ответы [ 2 ]

1 голос
/ 25 февраля 2012
    $docRoot = str_ireplace('/', '\\', $_SERVER['DOCUMENT_ROOT']); $f = str_ireplace($docRoot, '', $f);

ОК.Поэтому я немного обманул.Это одна строка, но два утверждения.Я мог бы сделать это одно заявление, но это будет сложнее понять.Просто замените первое str_ireplace на $ docRoot во втором выражении.

1 голос
/ 30 июля 2010

Самое простое решение - использовать второй набор Consts для удаленных URL.

define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT']);
define('ROOT_URL', 'http://domain.com');
define('BLAH_PATH', ROOT_PATH . PATH_SEPARATOR . 'blah.php');
define('BLAH_URL', ROOT_URL . PATH_SEPERATOR . 'blah.php');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...