php определить адрес страницы

Website-create.ru

Сегодня поговорим о том, как получить адрес страницы в php.

Зачем это может быть нужно?

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

Вероятно мы захотим сделать это по условию. И именно в условии мы и будем проверять тот ли это раздел.

Возможно с архитектурной точки зрения — это не самое лучшее решение. Однако, очень часто нам достаются уже готовые проекты, с которыми нужно что-то делать.

Получаем URL текущей страницы

Если вы хотите посмотреть всё, что хранит этот массив, то можете воспользоваться следующим кодом, который в читабельном виде выведет все значения:

Итак, давайте представим, что у нас есть веб страница следующего вида: http://localhost/php-lessons/url/?name=anna&city=Valencia.

Я тестирую на локальном сервере. Когда вы будете работать с реальным сайтом, который лежит в сети, то вместо localhost у вас будет имя вашего сайта (например exmple.ru).

Что мы видим в нашем подопытном url?

Давайте разберемся с каждой ситуацией.

Получаем полный URL страницы в php

Чтобы получить полный URL страницы вместе с GET-параметрами, воспользуемся следующим кодом:

Сначала мы проверяем, какой протокол используется: https или http.

Далее мы присоединяем двоеточие и 2 слэша, имя домена (хоста) и остальную часть нашего URL.

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

Если протокол нам получать не нужно, то можно сократить код до такого:

Результат тогда будет следующим:

Получаем URL страницы без GET-параметров в php

Иногда нас не интересуют GET-параметры, которые передаются как часть URL, и нам нужно получить адрес без них.

GET-параметры в нашем случает — это name=anna&city=Valencia

Чтобы отсечь их мы можем использовать php-функцию explode, которая разбивает строку по разделителю.

Наш URL — это ни что иное, как строка. GET-параметры всегда начинают передаваться после знака «?». Следовательно разделителем будет вопросительный знак.

Функция explode превратит строку в массив с двумя элементами. В первом будет содержаться наш искомый url без GET-параметров, а во втором останутся GET-параметры.

Результат будет таким: http://localhost/php-lessons/url/

Получаем GET-параметры из URL

Здесь совсем все просто. Чтобы получить только GET-параметры будем использовать следующий код:

Дальше мы можете разобрать это строку, например, с помощью функции explode или сделать с ними что-либо еще (в зависимости от стоящей перед вами задачи).

А у меня на сегодня всё!

Ставьте лайки, оставляйте комментарии, подписывайтесь на обновления!

Источник

В этой статье будет рассказано о том, как в языке программирования PHP получить адрес текущей страницы. Также вы узнаете о работе переменной $_SERVER.

Первое, о чём следует сказать, — зачем вообще получать ссылки (urls) в PHP? На практике варианты могут различаться. Представьте, что у нас для разных разделов применяется один и тот же шаблон. И возникает потребность в том, чтобы вывести (либо не вывести — зависит от ситуации) какой-нибудь специальный блок, причём в других разделах вывод этого блока не нужен.

В большинстве случаев мы пожелаем выполнить поставленную задачу по условию. То есть сделаем условие, в котором будем выполнять проверку того либо иного раздела. Можно сказать, что с точки зрения архитектуры данное решение не является оптимальным. Но на практике нам нередко достаются уже реализованные проекты, с которыми необходимо что-то решать с учётом уже имеющейся архитектуры.

Но давайте не будем много говорить, а лучше приступим к решению поставленной задачи — получению ссылки в PHP.

Получение ссылки текущей страницы в PHP

Идём дальше. Представьте, что у вас есть web-страница, имеющая следующий вид: http://localhost/php-lessons/url/?name=anna&city=Valencia. Тестирование в данном примере осуществляется на локальном сервере. Если надо тестировать код на реальном веб-сайте, доступном в интернете, достаточно вместо localhost прописать имя сайта (домен) — тот же otus.ru.

Читайте также:  конвенция монтре по черному морю что это такое

Что же мы увидим в подопытном url? Нас могут интересовать следующие данные: — адрес веб-страницы без GET-параметров; — URL с GET-параметрами; — непосредственно GET-параметры без текущей ссылки (адреса веб-страницы).

Лучше всего разобраться с каждым из случаев по отдельности — так будет гораздо понятнее.

Получение полного URL в PHP

Для получения полного URL вместе с имеющимися GET-параметрами, пригодится следующий код:

На втором этапе выполняется присоединение двоеточия и двух слэшев, имени домена и остальной части URL.

Итог выполнения кода будет следующим:

Если протокол получать не требуется, код на PHP можно немного сократить:

Смотрим на результат и видим, что протокол отсутствует:

Получение URL в PHP без GET-параметров

Иногда эти параметры, передаваемые в качестве части ссылки, нас не интересуют, то есть требуется получить адрес без них. Мы говорим о следующих параметрах: name=anna&city=Valencia.

В действительности их можно отсечь, используя функцию explode в PHP, разбивающую строку по разделителю. Не стоит объяснять, что ссылка представляет собой строку, а параметры GET начинают прописываться после «?». В результате вопросительный знак и станет разделителем, а функция explode сделает из строки массив с 2-мя элементами. Первый элемент станет содержать искомую ссылку без GET-параметров, так как эти самые параметры останутся во втором элементе.

Получение только параметров GET

С помощью этого кода получим:

Источник

Получить полный URL-адрес в PHP

Я использую этот код, чтобы получить полный URL:

Мне нужно получить URL-адрес, то, что написано в URL-адресе, не более и не что иное – полный URL-адрес.

Мне нужно узнать, как он отображается в панели навигации в веб-браузере, а не в реальном пути к файлу на сервере.

(Обратите внимание, что синтаксис с двойными кавычками является абсолютно правильным )

Если вы хотите поддерживать HTTP и HTTPS, вы можете использовать

Короткая версия для вывода ссылки на веб-странице

Ниже приведены дополнительные сведения о проблемах и крайних случаях формата //example.com/path/.

Полная версия

Структура URL:

Схема: // имя пользователя: пароль @domain: порт / путь? query_string # fragment_id

Части, выделенные жирным шрифтом, не будут включены функцией

Заметки:

Контролируемые клиентом (Browser) переменные:

Управляемые сервером переменные:

Связанный:

HTTP_HOST и SERVER_NAME
Требуется ли номер порта в HTTP-заголовке «Host»?
https://stackoverflow.com/a/28049503/175071

Примеры для: https://example.com/subFolder/yourfile.php?var=blabla#12345

типичные коды PHP:

Для WordPress

Мой любимый кросс-платформенный метод для поиска текущего URL-адреса:

Примечание. Я только что обновил код «Timo Huovinen», поэтому вы не получите доступ к URL-адресу. Этот URL-адрес является простым и удаляет такие вещи, как «? Hi = i & am = a & get».

будет отображаться как:

Если вы не используете Get’s для определения определенного контента, используйте его код! 🙂

Очистить код, работающий во всех веб-серверах (Apache, nginx, IIS, …):

Я использовал эту функцию для обработки URL-адреса:

Тот же метод, что и принятый ответ, но с поддержкой HTTPS и более читаемым:

Используйте этот однострочный интерфейс для поиска URL родительской папки (если у вас нет доступа к http_build_url (), который поставляется вместе с pecl_http):

Я сделал этот класс для обработки своих URI

‘; // Output extracted segments individually echo ‘Scheme: ‘._URI::Segment(‘SCHEME’).’
‘; echo ‘User: ‘._URI::Segment(‘USER’).’
‘; echo ‘Password: ‘._URI::Segment(‘PASSWD’).’
‘; echo ‘Host: ‘._URI::Segment(‘HOST’).’
‘; echo ‘Port: ‘._URI::Segment(‘PORT’).’
‘; echo ‘Path: ‘._URI::Segment(‘PATH’).’
‘; echo ‘Script: ‘._URI::Segment(‘SCRIPT’).’
‘; echo ‘Info: ‘._URI::Segment(‘INFO’).’
‘; // Compile extracted segments into a usable URL echo ‘
‘; echo ‘Full Compiled URI: ‘._URI::Compile().’
‘; echo ‘
‘; // Output precompiled common bases for a faster result and better performance echo ‘Host Base: ‘._URI::Base(‘Host’).’
‘; echo ‘Application Base: ‘._URI::Base(‘App’).’
‘; echo ‘Running Script: ‘._URI::Base(‘Script’).’
‘; echo ‘Current URI Base: ‘._URI::Base(‘Current’).’
‘; echo ‘Public Folder Base: ‘._URI::Base(‘Public’).’
‘; echo ‘Skin Folder Base: ‘._URI::Base(‘Skin’).’
‘; // Get all the precompiled bases in an associative array echo »; // Parse an example string and replace known keys with actual URI data. echo _URI::Parse(‘This is my current domain: %HostBase% And the current application is here: %AppBase% I load my skins form: %SkinBase% etc. ‘);

Читайте также:  пивко ресторан октябрьское поле

It still needs to be perfected but it’s a god solution for a centralized URI system 😀

This is quite easy to do with your Apache environment variables. This only works with Apache 2, which I assume you are using.

Simply use the following PHP code:

This is the solution for your problem:

I used this statement.

I hope this will help you.

$_SERVER is an array containing information such as headers, paths, and script locations. The entries in this array are created by the web server. There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here. That said, a large number of these variables are accounted for in the » CGI/1.1 specification, so you should be able to expect those.

You can use http_build_url with no arguments to get the full URL of the current page:

I have used the below code, and it is working fine for me, for both cases, HTTP and HTTPS.

You can make use of HTTP_ORIGIN as illustrated in the snippet below:

Источник

$_SERVER

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

$_SERVER — Информация о сервере и среде исполнения

Описание

Индексы

Абсолютный путь к исполняемому скрипту.

‘ SERVER_ADMIN ‘ Эта переменная получает своё значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определённое для данного виртуального хоста. ‘ SERVER_PORT ‘ Порт на компьютере сервера, используемый сервером для соединения. Для установок по умолчанию, значение будет ‘ 80 ‘; используя SSL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.

Примеры

Результатом выполнения данного примера будет что-то подобное:

Примечания

Смотрите также

User Contributed Notes 45 notes

Just a PHP file to put on your local server (as I don’t have enough memory)

That will give you the result of each variable like (if the file is server_indices.php at the root and Apache Web directory is in E:\web) :

No need to list all possible keys of the array.

The javascript block would define an event handler function and bind it to the form’s submit event. This event handler would load via an tag an external file, with the submitted username and password as parameters.

For example, with a PHP script, we can have this:

Will show something like 1492897785

However, a lot of vars are still vulnerable from environment injection.

I created a gist here ( https://gist.github.com/Pierstoval/f287d3e61252e791a943dd73874ab5ee ) with my PHP configuration on windows with PHP7.0.15 on WSL with bash, the results are that the only «safe» vars are the following:

All the rest can be overriden with environment vars, which is not very cool actually because it can break PHP applications sometimes.

An even *more* improved version.

You have missed ‘REDIRECT_STATUS’

Very useful if you point all your error pages to the same file.

ErrorDocument 404 /error-msg.php
ErrorDocument 500 /error-msg.php
ErrorDocument 400 /error-msg.php
ErrorDocument 401 /error-msg.php
ErrorDocument 403 /error-msg.php
# End of file.

Guide to absolute paths.

Data: __FILE__
Data type: String
Purpose: The absolute pathname of the running PHP file, including the filename.
Caveat: This is not the file called by the PHP processor, it’s what is running. So if you are inside an include, it’s the include.
Caveat: Symbolic links are pre-resolved, so don’t trust comparison of paths to be accurate.
Caveat: Don’t assume all operating systems use ‘/’ for the directory separator.
Works on web mode: Yes
Works on CLI mode: Yes

Читайте также:  не запускается лига легенд на виндовс 10

Data: __DIR__
Data type: String
Purpose: The absolute pathname to the running PHP file, excluding the filename
Caveat: This is not the file called by the PHP processor, it’s what is running. So if you are inside an include, it’s the include.
Caveat: Symbolic links are pre-resolved, so don’t trust comparison of paths to be accurate.
Caveat: Don’t assume all operating systems use ‘/’ for the directory separator.
Works on web mode: Yes
Works on CLI mode: Yes

They are still accessible, but only if the request was a POST request. When it is, it’ll be available as:
$_SERVER[‘CONTENT_LENGTH’]
$_SERVER[‘CONTENT_TYPE’]

If the browser sends an HTTP request header of:
X-Debug-Custom: some string

[ ‘HTTP_X_DEBUG_CUSTOM’ ]; // «some string»
?>

There are better ways to identify the HTTP request headers sent by the browser, but this is convenient if you know what to expect from, for example, an AJAX script with custom headers.

Works in PHP5 on Apache with mod_php. Don’t know if this is true from other environments.

Depending on what you want to do the content of this variable, put in On or Off.

This happens, for example, when calling the page through a call to stream_context_create() with a HTTP header of ‘request_fulluri’ set to 1.

Apparently, request_fulluri is useful when using some proxy servers.

One quick (and improvable) way to detect it would be to compare the start of the REQUEST_URI with REQUEST_SCHEME:

So near, and yet so far …

$_SERVER has nearly everything you need to know about the current web page environment. Something which would have been handy is easy access to the protocol and the actual web root.

For practical purposes, I normally include something like the following in my scripts:

[«_SERVER»]=>
array(24) <
[«MANPATH»]=>
string(48) «/usr/share/man:/usr/local/share/man:/usr/X11/man»
[«TERM»]=>
string(11) «xterm-color»
[«SHELL»]=>
string(9) «/bin/bash»
[«SSH_CLIENT»]=>
string(20) «127.0.0.1 41242 22»
[«OLDPWD»]=>
string(60) «/Library/WebServer/Domains/www.example.com/private»
[«SSH_TTY»]=>
string(12) «/dev/ttys000»
[«USER»]=>
string(5) «username»
[«MAIL»]=>
string(15) «/var/mail/username»
[«PATH»]=>
string(57) «/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin»
[«PWD»]=>
string(56) «/Library/WebServer/Domains/www.example.com/www»
[«SHLVL»]=>
string(1) «1»
[«HOME»]=>
string(12) «/Users/username»
[«LOGNAME»]=>
string(5) «username»
[«SSH_CONNECTION»]=>
string(31) «127.0.0.1 41242 10.0.0.1 22»
[«_»]=>
string(12) «/usr/bin/php»
[«__CF_USER_TEXT_ENCODING»]=>
string(9) «0x1F5:0:0»
[«PHP_SELF»]=>
string(10) «Shell.php»
[«SCRIPT_NAME»]=>
string(10) «Shell.php»
[«SCRIPT_FILENAME»]=>
string(10) «Shell.php»
[«PATH_TRANSLATED»]=>
string(10) «Shell.php»
[«DOCUMENT_ROOT»]=>
string(0) «»
[«REQUEST_TIME»]=>
int(1247162183)
[«argv»]=>
array(1) <
[0]=>
string(10) «Shell.php»
>
[«argc»]=>
int(1)
>

A way to get the absolute path of your page, independent from the site position (so works both on local machine and on server without setting anything) and from the server OS (works both on Unix systems and Windows systems).

I needed to get the full base directory of my script local to my webserver, IIS 7 on Windows 2008.

I ended up using this:

Guide to URL paths.

Guide to script parameters.

SetEnv varname «variable value»

Google Chrome 3.0.195.27 Windows xp

Lang. de-DE»
Array
(
[0] => de-DE
[primarytag] => de
[1] => de
[subtag] => DE
[2] => DE
)
Lang. de;q=0.8»
Array
(
[0] => de;q=0.8
[primarytag] => de
[1] => de
[subtag] =>
[2] =>
[quantifier] => 0.8
[3] => 0.8
)
Lang. en-US;q=0.6»
Array
(
[0] => en-US;q=0.6
[primarytag] => en
[1] => en
[subtag] => US
[2] => US
[quantifier] => 0.6
[3] => 0.6
)
Lang. en;q=0.4»
Array
(
[0] => en;q=0.4
[primarytag] => en
[1] => en
[subtag] =>
[2] =>
[quantifier] => 0.4
[3] => 0.4
)

Источник

Образовательный портал