Php получить url-адрес текущего каталога файлов

Это может быть легкий вопрос для вас, но я ломаю себе голову над этим.

У меня есть файл php, который должен знать текущий URL-адрес каталога, чтобы иметь возможность ссылаться на что-то относительно себя.

Например, в настоящее время я знаю, как получить текущий путь к каталогу вместо URL-адреса. Когда я использую это, я получаю путь:

realpath(__DIR__)

результат:

/Applications/MAMP/htdocs/mysite/dir1/dir2/dir3

Но это был бы мой желаемый результат:

http://localhost:8888/dir1/dir2/dir3

Обратите внимание, что это не местоположение текущей страницы. Страница вызывает файл из "http: // локальный: 8888 / каталог1 / каталог2 / каталог3 / myfile.php" А в myfile.php есть сценарий сверху.

- отредактируйте, чтобы уточнить детали - Спасибо за ответы. Но я понимаю, что мне нужно добавить больше деталей.

Использовать $_SERVER['DOCUMENT_ROOT'] намного проще, чем пытаться вычислить относительный каталог.

aynber 10.08.2018 17:22

Возможный дубликат PHP - преобразовать путь файловой системы в URL

gbalduzzi 10.08.2018 17:22

В большинстве современных веб-приложений URL-адрес не имеет никакого отношения к файловой системе ... просто нужно иметь в виду.

CD001 10.08.2018 17:23

@ CD001 да, но в этом случае было бы невозможно ответить без дополнительной информации. Его желаемый результат фактически соответствует пути к файлу относительно каталога проекта.

gbalduzzi 10.08.2018 17:25

@gbalduzzi - поэтому это был просто комментарий, а не ответ; Я подозреваю, что приложение, которое он пишет, может быть немного устаревшим - там мог - лучший способ приблизиться ко всему этому со смещением, что делает сам вопрос излишним.

CD001 10.08.2018 17:29

Спасибо, большинство результатов возвращают URL-адрес файла / пути, из которого вызывается myfile.php. Мне не нужен URL-адрес текущей (отображаемой) страницы. Но при вызове «myfile.php» он должен знать внутри «myfile.php» текущий URL-адрес каталога. Я не хочу его жестко кодировать, потому что какой смысл в коде.

Tim 10.08.2018 17:41

@Tim Я отправил ответ, который делает то, что вы хотите.

Andy 10.08.2018 17:42

В том, что вы спрашиваете, есть некоторая двусмысленность, потому что в вашем вопросе упоминается «текущий URL-адрес каталога». «Текущий каталог» и URL-адрес могут быть совершенно разными - не обязательно иметь прямую связь между каталогом файловой системы сценария и его URL-адресом.

Andy 10.08.2018 17:53

@ Энди Да! Я выяснил :) То, что мне кажется логикой, не является логикой для кого-то другого. ОСОБЕННО ПРОГРАММИСТ :) Заставляет меня думать о парне / отце / программисте, который заставляет своих детей писать команду съесть бутерброд с арахисовым маслом.

Tim 10.08.2018 18:01
6
9
18 012
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Используйте echo $_SERVER['PHP_SELF'];

Например, если URL-адрес http://localhost/~andy/test.php

Результатом будет:

/~andy/test.php

Этого достаточно, чтобы сгенерировать относительный URL.

Если вам нужен каталог, в котором работает ваш текущий скрипт - без имени файла - используйте:

echo dirname($_SERVER['PHP_SELF']);

В приведенном выше случае вы получите /~andy (без test.php в конце). См. http://php.net/manual/en/function.dirname.php

Обратите внимание, что echo getcwd(); - это нет, что вы хотите, исходя из вашего вопроса. Это дает вам местоположение в файловой системе / сервере (а не URL-адрес), с которого запускается ваш скрипт. Каталог, в котором скрипт расположен в файловой системе сервера, и URL-адрес - это две совершенно разные вещи.

Также есть функция для синтаксического анализа URL-адресов, встроенных в PHP: http://php.net/manual/en/function.parse-url.php

Спасибо, но в моем случае он возвращает путь, который в первую очередь вызывает myfile.php. '/ Index.php'. Местоположение родителя в этом случае

Tim 10.08.2018 17:44

Взгляните на php.net/manual/en/function.parse-url.php. В том, что вы спрашиваете, есть некоторая двусмысленность, потому что в вашем вопросе упоминается «текущий URL-адрес каталога». «Текущий каталог» и «URL-адрес» могут быть совершенно разными - не обязательно иметь прямую связь между каталогом файловой системы сценария и его URL-адресом. Похоже, вы пытаетесь разработать структуру каталогов URL-адреса, и в этом случае решение, которое я дал, сработает.

Andy 10.08.2018 17:53

Если ваш URL-адрес такой: https://localhost.com/this/is/a/url

$_SERVER['DOCUMENT_ROOT'] - дает системный путь [/ var / www / html / this / is / a / url]

$_SERVER['PHP_SELF'] - дает маршрут текущего файла (после имени домена) [/ this / is / a / url]

$_SERVER['SERVER_NAME'] - дает доменное имя [localhost.com]

$_SERVER['HTTP_REFERER'] - указывает правильный протокол HTTP (S) и имя домена. [https://localhost.com]

Если вы хотите получить полный URL-адрес, вы можете сделать что-то вроде:

echo $_SERVER['HTTP_REFERER'] . $_SERVER['PHP_SELF'];

Однако я верю в этом случае, что все, что вам нужно, это относительный путь ... и в этом случае вам нужно будет использовать только $_SERVER['PHP_SELF'];

Основываясь на вашем вопросе, я считаю, что это даст вам то, что вы хотите:

$_SERVER['HTTP_HOST'] . substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], "/"));

Справка:

  • $_SERVER['HTTP_HOST'] - В вашем случае это вернет: http: // локальный: 8888
  • $_SERVER['REQUEST_URI'] - В вашем случае это вернет: /dir1/dir2/dir3/myfile.php

С помощью добавленных методов substr() и strrpos() вы можете убрать _myfile.php` с конца, чтобы получить желаемый результат:

http: // локальный: 8888 / каталог1 / каталог2 / каталог3

Вы можете использовать dirname($_SERVER['PHP_SELF']); вместо substr() или strpos() для выполнения последней части. Манипулирование строками может привести к плохим результатам, если файл будет переименован. Вышеупомянутая функция просто удалит имя сценария из каталога, в котором он находится.

Andy 10.08.2018 17:48
Ответ принят как подходящий

Я нашел здесь решение: https://stackoverflow.com/a/1240574/7295693

Вот код, который я сейчас буду использовать:

function get_current_file_url($Protocol='http://') {
   return $Protocol.$_SERVER['HTTP_HOST'].str_replace($_SERVER['DOCUMENT_ROOT'], '', realpath(__DIR__)); 
}

Я обгорел на этом сегодня! Обязательно используйте реальный путь для корневого каталога документа realpath($_SERVER['DOCUMENT_ROOT']), чтобы символические ссылки были правильно разрешены.

SWHarden 28.01.2021 23:43

Другие вопросы по теме