Я не думаю, что безопасность будет достигнута просто потому, что это URL-адрес, который печатается в браузере ... самое худшее, что может случиться, - это раскрыть полный путь к файлу каталога и потенциально создать поврежденный ссылка.
В качестве небольшого примечания: если это печатается в HTML-документе, я предполагаю, что вы передаете вывод хотя бы в виде htmlentities ... на всякий случай input $ path содержит что-то вроде тега [script] ( XSS).
Чтобы сделать это немного более надежным, я бы не советовал сопоставлять 'DOCUMENT_ROOT', поскольку иногда он либо не установлен, либо не будет совпадать (например, когда правила переписывания Apache начинают мешать).
Если бы я переписал его, я бы просто гарантировал, что «HTTP_HOST» всегда печатается ...
function make_url($path, $secure = false){
return (!$secure ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].str_replace($_SERVER['DOCUMENT_ROOT'], '', $path);
}
... и, если возможно, обновите вызывающий код так, чтобы он просто проходил путь, поэтому мне даже не нужно удалять «DOCUMENT_ROOT» (т. Е. Что происходит, если путь не совпадает с «DOCUMENT_ROOT») ) ...
function make_url($path, $secure = false){
return (!$secure ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$path;
}
Что оставляет вопрос ... почему эта функция?
На моих сайтах у меня просто есть переменная, определенная в начале выполнения скрипта, которая устанавливает:
$GLOBALS['webDomain'] = 'http://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
$GLOBALS['webDomainSSL'] = $GLOBALS['webDomain'];
Где я использую GLOBALS, чтобы к нему можно было получить доступ где угодно (например, в функциях) ... но вы также можете рассмотреть возможность создания константы (define), если вы знаете, что это значение не изменится (я иногда меняю эти значения позже в файле конфигурации всего сайта, например, если у меня есть сертификат HTTPS / SSL для сайта).