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/"


person Marquizzo    schedule 09.12.2014    source источник
comment
вы можете добавить ответ и принять его, также вы получаете повторений   -  person chouaib    schedule 10.12.2014


Ответы (2)


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

Документы: 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 - количество раз замены совпадений регулярных выражений.
person Mooseman    schedule 09.12.2014
comment
Спасибо! Но я хотел бы избежать этого, потому что я отправляю файлы другому человеку, который будет загружать их на свой сервер, и я сомневаюсь, что структура их папок будет начинаться с /home/user/ - person Marquizzo; 10.12.2014
comment
@MarcoDelValle Обновлено! - person Mooseman; 10.12.2014
comment
К сожалению, preq_replace постоянно выдавал следующую ошибку: Unknown modifier 'n' in... После некоторых копаний вот код, который сработал: echo str_replace($_SERVER['DOCUMENT_ROOT'], 'http://www.domain.com', realpath('img/share.jpg')); Спасибо за толчок в правильном направлении! - person Marquizzo; 10.12.2014

Как насчет

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