Есть ли в PHP встроенная функция, которая возвращает полный URL-адрес файла, который вы объявляете с относительным путем? Мне нужно получить: "http://www.domain.com/projects/test/img/share.jpg"
от "img/share.jpg"
До сих пор я пробовал следующее:
realpath('img/share.jpg');
// Returns "/home/user/www.domain.com/projects/test/img/share.jpg"
Я также попробовал:
dirname(__FILE__)
// Returns "/home/user/www.domain.com/projects/test"
А также этот ответ утверждает, что следующее может быть подделано на стороне клиента:
"http://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI].'img/share.jpg"
плюс мой путь будет зависеть от того, получаю ли я доступ от /test/index.php
или просто test/
без index.php, и я не хочу жестко кодировать, будь то http или https.
У кого-нибудь есть решение для этого? Я отправлю эти файлы другому человеку, который загрузит их на сервер, поэтому структура папок не будет соответствовать "/home/user/www.domain.com/"
echo preg_replace(preg_quote($_SERVER['DOCUMENT_ROOT']), 'http://www.example.com/', realpath('img/share.jpg'), 1);
Docs: preg_replace
а также preg_quote
.
Аргументы preg_replace
:
preg_quote($_SERVER['DOCUMENT_ROOT'])
— принимает корень документа (например, /home/user/www.domain.com/
) и делает его регулярным выражением для использования с preg_replace
,'http://www.example.com/'
— строка для замены совпадения с регулярным выражением.realpath('img/share.jpg')
— строка для пути к файлу, включая корень документа.1
— количество раз, чтобы заменить регулярные выражения.Как насчет
echo preg_replace("'". preg_quote($_SERVER['DOCUMENT_ROOT']) ."'",'http://www.example.com/', realpath('img/share.jpg'), 1);