PHP: Как получить URL относительного файла

Есть ли в 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/"

1

Решение

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 — количество раз, чтобы заменить регулярные выражения.
2

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

Как насчет

echo preg_replace("'". preg_quote($_SERVER['DOCUMENT_ROOT']) ."'",'http://www.example.com/', realpath('img/share.jpg'), 1);
1

По вопросам рекламы [email protected]