CHttpRequest
| Пакет | system.web |
|---|---|
| Наследование | class CHttpRequest » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent |
| С версии | 1.0 |
| Исходный код | framework/web/CHttpRequest.php |
CHttpRequest также управляет куки, отправленными от и к пользователю. Установив enableCookieValidation в значение true, куки, отправленные пользователем, будут проверены на предмет изменения. Свойство cookies возвращает коллекцию куки. Подробнее см. CCookieCollection.
CHttpRequest является компонентом приложения по умолчанию, загружаемым CWebApplication. К нему можно получить доступ через CWebApplication::getRequest().
Общественные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| acceptTypes | строка | Возвращает типы принятия браузера пользователя, null, если не задано. | CHttpRequest |
| baseUrl | строка | Возвращает относительный URL приложения. | CHttpRequest |
| behaviors | массив | поведения, которые должны быть присоединены к этому компоненту. | CApplicationComponent |
| browser | массив | Возвращает информацию о возможностях браузера пользователя. | CHttpRequest |
| contentType | строка | Возвращает тип контента запроса | CHttpRequest |
| cookies | CCookieCollection | Возвращает коллекцию куки. | CHttpRequest |
| csrfCookie | массив | значения свойств (в парах имя-значение), используемые для инициализации куки CSRF. | CHttpRequest |
| csrfToken | строка | Возвращает случайный токен, используемый для проверки CSRF. | CHttpRequest |
| csrfTokenName | строка | имя токена, используемого для предотвращения CSRF. | CHttpRequest |
| enableCookieValidation | булево | указывает, должны ли куки проверяться, чтобы убедиться, что они не изменены. | CHttpRequest |
| enableCsrfValidation | булево | включает проверку CSRF (Cross-Site Request Forgery). | CHttpRequest |
| hostInfo | строка | Возвращает схему и доменную часть URL приложения. | CHttpRequest |
| httpVersion | строка | Возвращает версию HTTP-протокола, используемого клиентом. | CHttpRequest |
| isAjaxRequest | булево | Возвращает значение, показывающее, является ли это AJAX (XMLHttpRequest)-запросом. | CHttpRequest |
| isDeleteRequest | булево | Возвращает значение, показывающее, является ли это запросом DELETE. | CHttpRequest |
| isFlashRequest | булево | Возвращает значение, показывающее, является ли это запросом Adobe Flash или Adobe Flex. | CHttpRequest |
| isInitialized | булево | Проверяет, был ли инициализирован этот компонент приложения. | CApplicationComponent |
| isPatchRequest | булево | Возвращает значение, показывающее, является ли это запросом PATCH. | CHttpRequest |
| isPostRequest | булево | Возвращает значение, показывающее, является ли это запросом POST. | CHttpRequest |
| isPutRequest | булево | Возвращает значение, показывающее, является ли это запросом PUT. | CHttpRequest |
| isSecureConnection | булево | Возвращает, если запрос отправлен по защищённому каналу (https). | CHttpRequest |
| jsonAsArray | булево | указывает, должны ли результаты парсинга JSON запросов REST возвращать ассоциативные массивы для данных объектов. | CHttpRequest |
| pathInfo | строка | Возвращает часть пути текущего URL-запроса. | CHttpRequest |
| port | целое | Возвращает порт для использования для небезопасных запросов. | CHttpRequest |
| preferredAcceptType | массив | Возвращает предпочтительный MIME-тип пользователя. | CHttpRequest |
| preferredAcceptTypes | массив | Возвращает массив принятых MIME-типов пользователя в порядке предпочтения. | CHttpRequest |
| preferredLanguage | строка | Возвращает предпочтительный язык пользователя, который должен использоваться этим приложением. | CHttpRequest |
| preferredLanguages | массив | Возвращает массив принятых языков пользователя в порядке предпочтения. | CHttpRequest |
| queryString | строка | Возвращает часть URL-запроса, расположенную после знака вопроса. | CHttpRequest |
| rawBody | строка | Возвращает исходное тело HTTP-запроса. | CHttpRequest |
| requestType | строка | Возвращает тип запроса, например GET, POST, HEAD, PUT, PATCH, DELETE. | CHttpRequest |
| requestUri | строка | Возвращает часть URI запроса для текущего запрашиваемого URL. | CHttpRequest |
| restParams | массив | Возвращает параметры запроса. Обычно PUT, PATCH или DELETE. | CHttpRequest |
| scriptFile | строка | Возвращает путь к файлу скрипта входа. | CHttpRequest |
| scriptUrl | строка | Возвращает относительный URL файла скрипта входа. | CHttpRequest |
| securePort | целое | Возвращает порт для использования для защищённых запросов. | CHttpRequest |
| serverName | строка | Возвращает имя сервера. | CHttpRequest |
| serverPort | целое | Возвращает номер порта сервера. | CHttpRequest |
| url | строка | Возвращает текущий запрашиваемый URL. | CHttpRequest |
| urlReferrer | строка | Возвращает URL referrer, null, если не задано. | CHttpRequest |
| userAgent | строка | Возвращает user agent, null, если не задано. | CHttpRequest |
| userHost | строка | Возвращает имя хоста пользователя, null, если его нельзя определить. | CHttpRequest |
| userHostAddress | строка | Возвращает IP-адрес пользователя. | CHttpRequest |
Защищённые свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| isDeleteViaPostRequest | булево | Возвращает значение, показывающее, является ли это запросом DELETE, который был передан через POST. | CHttpRequest |
| isPatchViaPostRequest | булево | Возвращает значение, показывающее, является ли это запросом PATCH, который был передан через POST. | CHttpRequest |
| isPutViaPostRequest | булево | Возвращает значение, показывающее, является ли это запросом PUT, который был передан через POST. | CHttpRequest |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в значение null. | CComponent |
| asa() | Возвращает объект именованного поведения. | CComponent |
| attachBehavior() | Прикрепляет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик событий к событию. | CComponent |
| canGetProperty() | Определяет, можно ли считать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| compareAcceptTypes() | Функция сравнения для определения предпочтения карт массивов принятых типов MIME | CHttpRequest |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает прикрепленное поведение. | CComponent |
| disableBehaviors() | Отключает все прикрепленные к этому компоненту поведения. | CComponent |
| enableBehavior() | Включает прикрепленное поведение. | CComponent |
| enableBehaviors() | Включает все прикрепленные к этому компоненту поведения. | CComponent |
| evaluateExpression() | Вычисляет выражение PHP или обратный вызов в контексте этого компонента. | CComponent |
| getAcceptTypes() | Возвращает типы accept браузера пользователя, null, если не присутствует. | CHttpRequest |
| getBaseUrl() | Возвращает относительный URL для приложения. | CHttpRequest |
| getBrowser() | Возвращает информацию о возможностях браузера пользователя. | CHttpRequest |
| getContentType() | Возвращает тип контента запроса | CHttpRequest |
| getCookies() | Возвращает коллекцию cookie. | CHttpRequest |
| getCsrfToken() | Возвращает случайный токен, используемый для проверки CSRF. | CHttpRequest |
| getDelete() | Возвращает значение параметра DELETE с указанным именем. | CHttpRequest |
| getEventHandlers() | Возвращает список прикрепленных обработчиков событий для события. | CComponent |
| getHostInfo() | Возвращает схему и часть хоста URL приложения. | CHttpRequest |
| getHttpVersion() | Возвращает версию HTTP-протокола, используемого клиентом. | CHttpRequest |
| getIsAjaxRequest() | Возвращает, является ли это запросом AJAX (XMLHttpRequest). | CHttpRequest |
| getIsDeleteRequest() | Возвращает, является ли это запросом DELETE. | CHttpRequest |
| getIsFlashRequest() | Возвращает, является ли это запросом Adobe Flash или Adobe Flex. | CHttpRequest |
| getIsInitialized() | Проверяет, был ли инициализирован этот компонент приложения. | CApplicationComponent |
| getIsPatchRequest() | Возвращает, является ли это запросом PATCH. | CHttpRequest |
| getIsPostRequest() | Возвращает, является ли это запросом POST. | CHttpRequest |
| getIsPutRequest() | Возвращает, является ли это запросом PUT. | CHttpRequest |
| getIsSecureConnection() | Возвращает, отправлен ли запрос по защищенному каналу (https). | CHttpRequest |
| getParam() | Возвращает значение параметра GET или POST с указанным именем. | CHttpRequest |
| getPatch() | Возвращает значение параметра PATCH с указанным именем. | CHttpRequest |
| getPathInfo() | Возвращает часть path info текущего запрошенного URL. | CHttpRequest |
| getPort() | Возвращает порт для использования для незащищенных запросов. | CHttpRequest |
| getPost() | Возвращает значение параметра POST с указанным именем. | CHttpRequest |
| getPreferredAcceptType() | Возвращает предпочтительный тип MIME accept пользователя. | CHttpRequest |
| getPreferredAcceptTypes() | Возвращает массив принятых типов MIME пользователя в порядке предпочтения. | CHttpRequest |
| getPreferredLanguage() | Возвращает предпочтительный язык пользователя, который должен использоваться этим приложением. | CHttpRequest |
| getPreferredLanguages() | Возвращает массив принятых языков пользователя в порядке предпочтения. | CHttpRequest |
| getPut() | Возвращает значение параметра PUT с указанным именем. | CHttpRequest |
| getQuery() | Возвращает значение параметра GET с указанным именем. | CHttpRequest |
| getQueryString() | Возвращает часть URL запроса, расположенную после знака вопроса. | CHttpRequest |
| getRawBody() | Возвращает исходное тело HTTP-запроса. | CHttpRequest |
| getRequestType() | Возвращает тип запроса, например GET, POST, HEAD, PUT, PATCH, DELETE. | CHttpRequest |
| getRequestUri() | Возвращает часть URI запроса для текущего запрошенного URL. | CHttpRequest |
| getRestParams() | Возвращает параметры запроса. Обычно PUT, PATCH или DELETE. | CHttpRequest |
| getScriptFile() | Возвращает путь к файлу скрипта входа. | CHttpRequest |
| getScriptUrl() | Возвращает относительный URL скрипта входа. | CHttpRequest |
| getSecurePort() | Возвращает порт для использования для защищенных запросов. | CHttpRequest |
| getServerName() | Возвращает имя сервера. | CHttpRequest |
| getServerPort() | Возвращает номер порта сервера. | CHttpRequest |
| getUrl() | Возвращает текущий запрашиваемый URL. | CHttpRequest |
| getUrlReferrer() | Возвращает URL referrer, null если отсутствует. | CHttpRequest |
| getUserAgent() | Возвращает user agent, null если отсутствует. | CHttpRequest |
| getUserHost() | Возвращает имя хоста пользователя, null если не может быть определено. | CHttpRequest |
| getUserHostAddress() | Возвращает IP-адрес пользователя. | CHttpRequest |
| hasEvent() | Определяет, определён ли event. | CComponent |
| hasEventHandler() | Проверяет, есть ли обработчики для указанного события. | CComponent |
| hasProperty() | Определяет, определён ли свойство. | CComponent |
| init() | Инициализирует компонент приложения. | CHttpRequest |
| parseAcceptHeader() | Парсит заголовок HTTP Accept, возвращая массив со всеми частями каждой записи. | CHttpRequest |
| raiseEvent() | Возбуждает событие. | CComponent |
| redirect() | Перенаправляет браузер на указанный URL. | CHttpRequest |
| sendFile() | Отправляет файл пользователю. | CHttpRequest |
| setBaseUrl() | Устанавливает относительный URL для приложения. | CHttpRequest |
| setHostInfo() | Устанавливает схему и часть хоста URL приложения. | CHttpRequest |
| setPort() | Устанавливает порт для небезопасных запросов. | CHttpRequest |
| setScriptUrl() | Устанавливает относительный URL для скрипта входа приложения. | CHttpRequest |
| setSecurePort() | Устанавливает порт для защищённых запросов. | CHttpRequest |
| stripSlashes() | Удаляет слеши из входных данных. | CHttpRequest |
| validateCsrfToken() | Выполняет проверку CSRF. | CHttpRequest |
| xSendFile() | Отправляет существующий файл браузеру для скачивания с использованием x-sendfile. | CHttpRequest |
Защищённые методы
| Метод | Описание | Определён в |
|---|---|---|
| createCsrfCookie() | Создаёт cookie с случайным CSRF-токен. | CHttpRequest |
| decodePathInfo() | Декодирует path info. | CHttpRequest |
| getIsDeleteViaPostRequest() | Возвращает, является ли это запросом DELETE, который был перенаправлен через POST. | CHttpRequest |
| getIsPatchViaPostRequest() | Возвращает, является ли это запросом PATCH, который был перенаправлен через POST. | CHttpRequest |
| getIsPutViaPostRequest() | Возвращает, является ли это запросом PUT, который был перенаправлен через POST. | CHttpRequest |
| normalizeRequest() | Нормализует данные запроса. | CHttpRequest |
Подробное описание свойств
acceptTypes свойство только для чтения
public string getAcceptTypes()
Возвращает типы accept браузера пользователя, null если отсутствуют.
baseUrl свойство
public string getBaseUrl(boolean $absolute=false)
public void setBaseUrl(string $value)
Возвращает относительный URL для приложения. Аналогично scriptUrl, но без имени файла скрипта и без конечных слешей.
См. также
browser свойство только для чтения
public array getBrowser(string $userAgent=NULL)
Возвращает информацию о возможностях браузера пользователя.
contentType свойство только для чтения (доступно с версии 1.1.17)
public string getContentType()
Возвращает тип контента запроса. Заголовок Content-Type указывает тип MIME данных, содержащихся в getRawBody(), или тип данных, который был бы отправлен в случае метода HEAD.
cookies свойство только для чтения
public CCookieCollection getCookies()
Возвращает коллекцию cookie. Результат можно использовать как ассоциативный массив. Добавление объектов CHttpCookie в коллекцию отправит cookie клиенту; удаление объектов из коллекции удалит эти cookie на стороне клиента.
csrfCookie свойство
public array $csrfCookie;
Значения свойств (в парах имя-значение), используемые для инициализации cookie CSRF. Любое свойство CHttpCookie может быть инициализировано. Это свойство эффективно только при enableCsrfValidation = true.
csrfToken свойство только для чтения
public string getCsrfToken()
Возвращает случайный токен, используемый для проверки CSRF. Токен сначала читается из cookie. Если не найден, генерируется новый.
См. также
csrfTokenName свойство
public string $csrfTokenName;
Имя токена, используемого для предотвращения CSRF. По умолчанию 'YII_CSRF_TOKEN'. Это свойство эффективно только при enableCsrfValidation = true.
enableCookieValidation свойство
public boolean $enableCookieValidation;
Указывает, нужно ли проверять cookie, чтобы убедиться, что они не были изменены. По умолчанию false.
enableCsrfValidation свойство
public boolean $enableCsrfValidation;
Включает проверку CSRF (Cross-Site Request Forgery). По умолчанию false. Установив это свойство в true, формы, отправленные в Yii веб-приложение, должны исходить из того же приложения. Если нет, будет выброшено исключение 400 HTTP. Обратите внимание, что эта функция требует, чтобы клиентский браузер принимал cookie. Вам также нужно использовать CHtml::form или CHtml::statefulForm для генерации необходимых HTML-форм на ваших страницах.
hostInfo свойство
public string getHostInfo(string $schema='')
public void setHostInfo(string $value)
Возвращает схему и часть хоста URL приложения. Возвращённый URL не имеет конечного слэша. По умолчанию определяется на основе информации о запросе пользователя. Вы можете явно указать его, установив свойство hostInfo.
См. также
httpVersion свойство только для чтения (доступно с версии 1.1.16)
public string getHttpVersion()
Возвращает версию HTTP-протокола, используемого клиентом.
isAjaxRequest свойство только для чтения
public boolean getIsAjaxRequest()
Возвращает, является ли это AJAX-запросом (XMLHttpRequest).
isDeleteRequest свойство только для чтения (доступно с версии 1.1.7)
public boolean getIsDeleteRequest()
Возвращает, является ли это запросом DELETE.
isDeleteViaPostRequest свойство только для чтения (доступно с версии 1.1.11)
protected boolean getIsDeleteViaPostRequest()
Возвращает, является ли это запросом DELETE, перенаправленным через POST.
isFlashRequest свойство только для чтения (доступно с версии 1.1.11)
public boolean getIsFlashRequest()
Возвращает, является ли это запросом от Adobe Flash или Adobe Flex.
isPatchRequest свойство только для чтения (доступно с версии 1.1.16)
public boolean getIsPatchRequest()
Возвращает, является ли это запросом PATCH.
isPatchViaPostRequest свойство только для чтения (доступно с версии 1.1.16)
protected boolean getIsPatchViaPostRequest()
Возвращает, является ли это запросом PATCH, перенаправленным через POST.
isPostRequest свойство только для чтения
public boolean getIsPostRequest()
Возвращает значение, указывающее, является ли это POST-запросом.
isPutRequest свойство только для чтения (доступно начиная с v1.1.7)
public boolean getIsPutRequest()
Возвращает значение, указывающее, является ли это PUT-запросом.
isPutViaPostRequest свойство только для чтения (доступно начиная с v1.1.11)
protected boolean getIsPutViaPostRequest()
Возвращает значение, указывающее, является ли это PUT-запросом, переданным через POST.
isSecureConnection свойство только для чтения
public boolean getIsSecureConnection()
Возвращает значение, указывающее, отправлен ли запрос по защищенному каналу (https).
jsonAsArray свойство (доступно начиная с v1.1.17)
public boolean $jsonAsArray;
Указывает, должны ли результаты парсинга JSON-запросов REST возвращаться в виде ассоциативных массивов для данных объектов.
См. также
pathInfo свойство только для чтения
public string getPathInfo()
Возвращает информацию о пути текущего запрошенного URL. Это часть, которая находится после скрипта входа и перед знаком вопроса. Начальные и конечные слэши удаляются.
port свойство (доступно начиная с v1.1.3)
public integer getPort()
public void setPort(integer $value)
Возвращает порт для использования в незащищенных запросах. По умолчанию 80 или порт, указанный сервером, если текущий запрос не защищен. Вы можете явно указать его, задав свойство port.
См. также
preferredAcceptType свойство только для чтения
public array getPreferredAcceptType()
Возвращает предпочтительный MIME-тип accept пользователя. MIME-тип возвращается в виде массива (см. parseAcceptHeader()).
preferredAcceptTypes свойство только для чтения
public array getPreferredAcceptTypes()
Возвращает массив принятых MIME-типов пользователя в порядке предпочтения. Каждый элемент массива представляет собой карту с типом, подтипом, базовым типом и параметрами — массивом пар «ключ-значение». См. parseAcceptHeader() для описания массива.
preferredLanguage свойство только для чтения
public string getPreferredLanguage(array $languages=array ( ))
Возвращает предпочтительный язык пользователя, который должен использоваться этим приложением. Определение языка основано на предпочтительных языках пользователя и языках, поддерживаемых приложением. Метод попытается найти наилучшее соответствие.
preferredLanguages свойство только для чтения
public array getPreferredLanguages()
Возвращает массив принятых языков пользователя в порядке предпочтения. Возвращаемые идентификаторы языков НЕ будут канонизированы с помощью CLocale::getCanonicalID.
queryString свойство только для чтения
public string getQueryString()
Возвращает часть URL запроса, которая находится после знака вопроса.
rawBody свойство только для чтения (доступно начиная с v1.1.13)
public string getRawBody()
Возвращает исходное тело HTTP-запроса.
requestType свойство только для чтения
public string getRequestType()
Возвращает тип запроса, например, GET, POST, HEAD, PUT, PATCH, DELETE. Тип запроса можно вручную задать в POST-запросах с параметром _method. Полезно для RESTful-запросов от старых браузеров, которые не поддерживают PUT, PATCH или DELETE напрямую (доступно начиная с версии 1.1.11).
requestUri свойство только для чтения
public string getRequestUri()
Возвращает часть URI запроса для текущего запрошенного URL. Это часть, которая следует за частью host info. Она включает часть строки запроса, если она есть. Реализация этого метода ссылается на Zend_Controller_Request_Http в Zend Framework.
restParams свойство только для чтения (доступно начиная с v1.1.13 метод стал общедоступным)
public array getRestParams()
Возвращает параметры запроса. Обычно PUT, PATCH или DELETE.
scriptFile свойство только для чтения
public string getScriptFile()
Возвращает путь к файлу скрипта входа.
scriptUrl свойство
public string getScriptUrl()
public void setScriptUrl(string $value)
Возвращает относительный URL скрипта входа. Реализация этого метода ссылается на Zend_Controller_Request_Http в Zend Framework.
securePort свойство (доступно начиная с v1.1.3)
public integer getSecurePort()
public void setSecurePort(integer $value)
Возвращает порт для использования в защищенных запросах. По умолчанию 443 или порт, указанный сервером, если текущий запрос защищен. Вы можете явно указать его, задав свойство securePort.
См. также
serverName свойство только для чтения
public string getServerName()
Возвращает имя сервера.
serverPort свойство только для чтения
public integer getServerPort()
Возвращает номер порта сервера.
url свойство только для чтения
public string getUrl()
Возвращает текущий запрашиваемый URL. Это то же самое, что и getRequestUri.
urlReferrer свойство только для чтения
public string getUrlReferrer()
Возвращает URL-ссылку, null если отсутствует.
userAgent свойство только для чтения
public string getUserAgent()
Возвращает пользовательского агента, null если отсутствует.
userHost свойство только для чтения
public string getUserHost()
Возвращает имя хоста пользователя, null если невозможно определить.
userHostAddress свойство только для чтения
public string getUserHostAddress()
Возвращает IP-адрес пользователя.
Подробное описание методов
compareAcceptTypes() метод
public static integer compareAcceptTypes(array $a, array $b) | ||
| $a | массив | принятый MIME-тип пользователя как массив |
| $b | массив | принятый MIME-тип пользователя как массив |
| {return} | целое число | -1, 0 или 1, если у $a соответственно большая, равная или меньшая степень предпочтения, чем у $b (более высокая степень предпочтения стоит первой). |
public static function compareAcceptTypes($a,$b)
{
// check for equal quality first
if($a['params']['q']===$b['params']['q'])
if(!($a['type']==='*' xor $b['type']==='*'))
if (!($a['subType']==='*' xor $b['subType']==='*'))
// finally, higher number of parameters counts as greater precedence
if(count($a['params'])===count($b['params']))
return 0;
else
return count($a['params'])<count($b['params']) ? 1 : -1;
// more specific takes precedence - whichever one doesn't have a * subType
else
return $a['subType']==='*' ? 1 : -1;
// more specific takes precedence - whichever one doesn't have a * type
else
return $a['type']==='*' ? 1 : -1;
else
return ($a['params']['q']<$b['params']['q']) ? 1 : -1;
}
Функция сравнения для определения предпочтения принятых MIME-типов в виде массивов. См. parseAcceptHeader() для формата $a и $b
createCsrfCookie() метод
protected CHttpCookie createCsrfCookie() | ||
| {return} | CHttpCookie | сгенерированный cookie |
protected function createCsrfCookie()
{
$securityManager=Yii::app()->getSecurityManager();
$token=$securityManager->generateRandomBytes(32);
$maskedToken=$securityManager->maskToken($token);
$cookie=new CHttpCookie($this->csrfTokenName,$maskedToken);
if(is_array($this->csrfCookie))
{
foreach($this->csrfCookie as $name=>$value)
$cookie->$name=$value;
}
return $cookie;
}
Создаёт cookie с случайным CSRF-токенем. Начальные значения, указанные в csrfCookie, будут применены к сгенерированному cookie.
См. также
decodePathInfo() метод (доступно начиная с v1.1.10)
protected string decodePathInfo(string $pathInfo) | ||
| $pathInfo | строка | закодированная информация о пути |
| {return} | строка | расшифрованная информация о пути |
protected function decodePathInfo($pathInfo)
{
$pathInfo = urldecode($pathInfo);
// is it UTF-8?
// http://w3.org/International/questions/qa-forms-utf-8.html
if(preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $pathInfo))
{
return $pathInfo;
}
else
{
return utf8_encode($pathInfo);
}
}
Декодирует информацию о пути. Этот метод является улучшенной версией встроенной функции urldecode() и используется в getPathInfo() для декодирования части пути запрошенного URI. Вы можете переопределить этот метод, чтобы изменить способ декодирования информации о пути.
getAcceptTypes() метод
public string getAcceptTypes() | ||
| {return} | строка | принятые браузером типы, null если отсутствуют |
public function getAcceptTypes()
{
return isset($_SERVER['HTTP_ACCEPT'])?$_SERVER['HTTP_ACCEPT']:null;
}
Возвращает типы accept браузера пользователя, null если отсутствуют.
END_OF_DOCUMENT_MARKERgetBaseUrl() метод
public string getBaseUrl(boolean $absolute=false) | ||
| $absolute | boolean | указывает, нужно ли возвращать абсолютный URL. По умолчанию false, что означает возврат относительного URL. |
| {return} | string | относительный URL приложения |
public function getBaseUrl($absolute=false)
{
if($this->_baseUrl===null)
$this->_baseUrl=rtrim(dirname($this->getScriptUrl()),'\\/');
return $absolute ? $this->getHostInfo() . $this->_baseUrl : $this->_baseUrl;
}
Возвращает относительный URL приложения. Это аналогично scriptUrl, за исключением того, что он не содержит имя файла скрипта, а конечные косые черты удалены.
См. также
getBrowser() метод
public array getBrowser(string $userAgent=NULL) | ||
| $userAgent | string | анализ пользовательского агента. По умолчанию null, что означает использование текущей информации из HTTP-заголовка User-Agent. |
| {return} | array | возможности браузера пользователя. |
public function getBrowser($userAgent=null)
{
return get_browser($userAgent,true);
}
Возвращает информацию о возможностях браузера пользователя.
getContentType() метод (доступен начиная с v1.1.17)
public string getContentType() | ||
| {return} | string | тип содержимого запроса. Возвращает null, если информация недоступна. |
public function getContentType()
{
if (isset($_SERVER["CONTENT_TYPE"])) {
return $_SERVER["CONTENT_TYPE"];
} elseif (isset($_SERVER["HTTP_CONTENT_TYPE"])) {
//fix bug https://bugs.php.net/bug.php?id=66606
return $_SERVER["HTTP_CONTENT_TYPE"];
}
return null;
}
Возвращает тип содержимого запроса. Заголовок Content-Type указывает MIME-тип данных, содержащихся в getRawBody(), или, в случае метода HEAD, тип носителя, который был бы отправлен, если бы запрос был GET.
getCookies() метод
public CCookieCollection getCookies() | ||
| {return} | CCookieCollection | коллекция куки. |
public function getCookies()
{
if($this->_cookies!==null)
return $this->_cookies;
else
return $this->_cookies=new CCookieCollection($this);
}
Возвращает коллекцию куки. Результат можно использовать как ассоциативный массив. Добавление объектов CHttpCookie в коллекцию отправит куки клиенту; удаление объектов из коллекции удалит эти куки на клиенте.
getCsrfToken() метод
public string getCsrfToken() | ||
| {return} | string | случайный токен для валидации CSRF. |
public function getCsrfToken()
{
if($this->_csrfToken===null)
{
$cookie=$this->getCookies()->itemAt($this->csrfTokenName);
if(!$cookie || ($this->_csrfToken=$cookie->value)==null)
{
$cookie=$this->createCsrfCookie();
$this->_csrfToken=$cookie->value;
$this->getCookies()->add($cookie->name,$cookie);
}
}
return $this->_csrfToken;
}
Возвращает случайный токен, используемый для валидации CSRF. Сначала токен будет считан из куки. Если он не найден, токен будет сгенерирован заново.
См. также
getDelete() метод (доступен начиная с v1.1.7)
public mixed getDelete(string $name, mixed $defaultValue=NULL) | ||
| $name | string | имя параметра DELETE |
| $defaultValue | mixed | значение параметра по умолчанию, если параметр DELETE не существует. |
| {return} | mixed | значение параметра DELETE |
public function getDelete($name,$defaultValue=null)
{
if($this->getIsDeleteViaPostRequest())
return $this->getPost($name, $defaultValue);
if($this->getIsDeleteRequest())
{
$restParams=$this->getRestParams();
return isset($restParams[$name]) ? $restParams[$name] : $defaultValue;
}
else
return $defaultValue;
}
Возвращает значение параметра DELETE по имени. Если параметр DELETE не существует или текущий запрос не является запросом DELETE, возвращается второе значение параметра. Если запрос DELETE был отформатирован через POST с помощью параметра _method, возвращается значение POST-параметра (доступно начиная с версии 1.1.11).
getHostInfo() метод
public string getHostInfo(string $schema='') | ||
| $schema | string | схема для использования (например, http, https). Если пусто, используется схема текущего запроса. |
| {return} | string | схема и доменная часть (с номером порта при необходимости) URL запроса (например, http://www.yiiframework.com) |
public function getHostInfo($schema='')
{
if($this->_hostInfo===null)
{
if($secure=$this->getIsSecureConnection())
$http='https';
else
$http='http';
if(isset($_SERVER['HTTP_HOST']))
$this->_hostInfo=$http.'://'.$_SERVER['HTTP_HOST'];
else
{
$this->_hostInfo=$http.'://'.$_SERVER['SERVER_NAME'];
$port=$secure ? $this->getSecurePort() : $this->getPort();
if(($port!==80 && !$secure) || ($port!==443 && $secure))
$this->_hostInfo.=':'.$port;
}
}
if($schema!=='')
{
$secure=$this->getIsSecureConnection();
if($secure && $schema==='https' || !$secure && $schema==='http')
return $this->_hostInfo;
$port=$schema==='https' ? $this->getSecurePort() : $this->getPort();
if($port!==80 && $schema==='http' || $port!==443 && $schema==='https')
$port=':'.$port;
else
$port='';
$pos=strpos($this->_hostInfo,':');
return $schema.substr($this->_hostInfo,$pos,strcspn($this->_hostInfo,':',$pos+1)+1).$port;
}
else
return $this->_hostInfo;
}
Возвращает схему и доменную часть URL приложения. Возвращаемый URL не имеет конечной косой черты. По умолчанию определяется на основе информации о запросе пользователя. Вы можете явно указать его, установив свойство hostInfo.
См. также
getHttpVersion() метод (доступен начиная с v1.1.16)
public string getHttpVersion() | ||
| {return} | string | версия HTTP-протокола. |
public function getHttpVersion()
{
if($this->_httpVersion===null)
{
if(isset($_SERVER['SERVER_PROTOCOL']) && $_SERVER['SERVER_PROTOCOL']==='HTTP/1.0')
$this->_httpVersion='1.0';
else
$this->_httpVersion='1.1';
}
return $this->_httpVersion;
}
Возвращает версию HTTP-протокола, используемого клиентом.
getIsAjaxRequest() метод
public boolean getIsAjaxRequest() | ||
| {return} | boolean | является ли это AJAX (XMLHttpRequest) запросом. |
public function getIsAjaxRequest()
{
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';
}
Возвращает, является ли это AJAX (XMLHttpRequest) запросом.
getIsDeleteRequest() метод (доступен начиная с v1.1.7)
public boolean getIsDeleteRequest() | ||
| {return} | boolean | является ли это запросом DELETE. |
public function getIsDeleteRequest()
{
return (isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'DELETE')) || $this->getIsDeleteViaPostRequest();
}
Возвращает, является ли это запросом DELETE.
getIsDeleteViaPostRequest() метод (доступен начиная с v1.1.11)
protected boolean getIsDeleteViaPostRequest() | ||
| {return} | boolean | является ли это запросом DELETE, отформатированным через POST. |
protected function getIsDeleteViaPostRequest()
{
return isset($_POST['_method']) && !strcasecmp($_POST['_method'],'DELETE');
}
Возвращает, является ли это запросом DELETE, отформатированным через POST.
getIsFlashRequest() метод (доступен начиная с v1.1.11)
public boolean getIsFlashRequest() | ||
| {return} | boolean | является ли это запросом Adobe Flash или Adobe Flex. |
public function getIsFlashRequest()
{
return isset($_SERVER['HTTP_USER_AGENT']) && (stripos($_SERVER['HTTP_USER_AGENT'],'Shockwave')!==false || stripos($_SERVER['HTTP_USER_AGENT'],'Flash')!==false);
}
Возвращает, является ли это запросом Adobe Flash или Adobe Flex.
getIsPatchRequest() метод (доступен начиная с v1.1.16)
public boolean getIsPatchRequest() | ||
| {return} | boolean | является ли это запросом PATCH. |
public function getIsPatchRequest()
{
return (isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'PATCH')) || $this->getIsPatchViaPostRequest();
}
Возвращает значение, указывающее, является ли текущий запрос PATCH-запросом.
getIsPatchViaPostRequest() метод (доступен начиная с версии v1.1.16)
protected boolean getIsPatchViaPostRequest() | ||
| {return} | boolean | указывает, является ли данный PATCH-запрос, переданный через POST. |
protected function getIsPatchViaPostRequest()
{
return isset($_POST['_method']) && !strcasecmp($_POST['_method'],'PATCH');
}
Возвращает значение, указывающее, является ли текущий запрос PATCH-запросом, переданным через POST.
getIsPostRequest() метод
public boolean getIsPostRequest() | ||
| {return} | boolean | указывает, является ли данный запрос POST-запросом. |
public function getIsPostRequest()
{
return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'POST');
}
Возвращает значение, указывающее, является ли текущий запрос POST-запросом.
getIsPutRequest() метод (доступен начиная с версии v1.1.7)
public boolean getIsPutRequest() | ||
| {return} | boolean | указывает, является ли данный запрос PUT-запросом. |
public function getIsPutRequest()
{
return (isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'PUT')) || $this->getIsPutViaPostRequest();
}
Возвращает значение, указывающее, является ли текущий запрос PUT-запросом.
getIsPutViaPostRequest() метод (доступен начиная с версии v1.1.11)
protected boolean getIsPutViaPostRequest() | ||
| {return} | boolean | указывает, является ли данный PUT-запрос, переданный через POST. |
protected function getIsPutViaPostRequest()
{
return isset($_POST['_method']) && !strcasecmp($_POST['_method'],'PUT');
}
Возвращает значение, указывающее, является ли текущий PUT-запрос, переданный через POST.
getIsSecureConnection() метод
public boolean getIsSecureConnection() | ||
| {return} | boolean | указывает, отправлен ли запрос по защищённому каналу (https) |
public function getIsSecureConnection()
{
return isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'],'on')===0 || $_SERVER['HTTPS']==1)
|| isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'],'https')===0;
}
Возвращает значение, указывающее, отправлен ли запрос по защищённому каналу (https).
getParam() метод
public mixed getParam(string $name, mixed $defaultValue=NULL) | ||
| $name | string | имя параметра GET |
| $defaultValue | mixed | значение параметра по умолчанию, если параметр GET не существует. |
| {return} | mixed | значение параметра GET |
public function getParam($name,$defaultValue=null)
{
return isset($_GET[$name]) ? $_GET[$name] : (isset($_POST[$name]) ? $_POST[$name] : $defaultValue);
}
Возвращает значение параметра GET или POST по имени. Если параметр GET или POST не существует, возвращается второе значение аргумента. Если GET и POST содержат параметр с указанным именем, приоритет отдаётся параметру GET.
getPatch() метод (доступен начиная с версии v1.1.16)
public mixed getPatch(string $name, mixed $defaultValue=NULL) | ||
| $name | string | имя параметра PATCH |
| $defaultValue | mixed | значение параметра по умолчанию, если параметр PATCH не существует. |
| {return} | mixed | значение параметра PATCH |
public function getPatch($name,$defaultValue=null)
{
if($this->getIsPatchViaPostRequest())
return $this->getPost($name, $defaultValue);
if($this->getIsPatchRequest())
{
$restParams=$this->getRestParams();
return isset($restParams[$name]) ? $restParams[$name] : $defaultValue;
}
else
return $defaultValue;
}
Возвращает значение параметра PATCH по имени. Если параметр PATCH не существует или текущий запрос не является PATCH-запросом, возвращается второе значение аргумента. Если PATCH-запрос был передан через POST с помощью параметра _method, возвращается значение параметра POST.
getPathInfo() метод
public string getPathInfo() | ||
| {return} | string | часть URL запроса после скрипта входа и перед знаком вопроса. Обратите внимание, что возвращаемый pathinfo декодируется начиная с версии 1.1.4. До версии 1.1.4 декодирование зависит от конфигурации сервера (в большинстве случаев не декодируется). |
public function getPathInfo()
{
if($this->_pathInfo===null)
{
$pathInfo=$this->getRequestUri();
if(($pos=strpos($pathInfo,'?'))!==false)
$pathInfo=substr($pathInfo,0,$pos);
$pathInfo=$this->decodePathInfo($pathInfo);
$scriptUrl=$this->getScriptUrl();
$baseUrl=$this->getBaseUrl();
if(strpos($pathInfo,$scriptUrl)===0)
$pathInfo=substr($pathInfo,strlen($scriptUrl));
elseif($baseUrl==='' || strpos($pathInfo,$baseUrl)===0)
$pathInfo=substr($pathInfo,strlen($baseUrl));
elseif(strpos($_SERVER['PHP_SELF'],$scriptUrl)===0)
$pathInfo=substr($_SERVER['PHP_SELF'],strlen($scriptUrl));
else
throw new CException(Yii::t('yii','CHttpRequest is unable to determine the path info of the request.'));
if($pathInfo==='/' || $pathInfo===false)
$pathInfo='';
elseif($pathInfo!=='' && $pathInfo[0]==='/')
$pathInfo=substr($pathInfo,1);
if(($posEnd=strlen($pathInfo)-1)>0 && $pathInfo[$posEnd]==='/')
$pathInfo=substr($pathInfo,0,$posEnd);
$this->_pathInfo=$pathInfo;
}
return $this->_pathInfo;
}
Возвращает информацию о пути текущего запрошенного URL. Это относится к части, которая следует после скрипта входа и перед знаком вопроса. Начальные и конечные слэши удаляются.
getPort() метод (доступен начиная с версии v1.1.3)
public integer getPort() | ||
| {return} | integer | номер порта для незащищённых запросов. |
public function getPort()
{
if($this->_port===null)
$this->_port=!$this->getIsSecureConnection() && isset($_SERVER['SERVER_PORT']) ? (int)$_SERVER['SERVER_PORT'] : 80;
return $this->_port;
}
Возвращает порт для использования в случае незащищённых запросов. По умолчанию 80, или порт, указанный сервером, если текущий запрос не защищён. Вы можете явно указать его, установив свойство port.
См. также
getPost() метод
public mixed getPost(string $name, mixed $defaultValue=NULL) | ||
| $name | string | имя параметра POST |
| $defaultValue | mixed | значение параметра по умолчанию, если параметр POST не существует. |
| {return} | mixed | значение параметра POST |
public function getPost($name,$defaultValue=null)
{
return isset($_POST[$name]) ? $_POST[$name] : $defaultValue;
}
Возвращает значение параметра POST по имени. Если параметр POST не существует, возвращается второе значение аргумента.
getPreferredAcceptType() метод
public array getPreferredAcceptType() | ||
| {return} | array | предпочитаемый тип MIME пользователя или false, если пользователь не имеет предпочтительных типов. |
public function getPreferredAcceptType()
{
$preferredAcceptTypes=$this->getPreferredAcceptTypes();
return empty($preferredAcceptTypes) ? false : $preferredAcceptTypes[0];
}
Возвращает предпочтительный тип MIME пользователя. Тип MIME возвращается в виде массива (см. parseAcceptHeader()).
getPreferredAcceptTypes() метод
public array getPreferredAcceptTypes() | ||
| {return} | array | принятые пользователем типы MIME в порядке приоритета. |
public function getPreferredAcceptTypes()
{
if($this->_preferredAcceptTypes===null)
{
$accepts=self::parseAcceptHeader($this->getAcceptTypes());
usort($accepts,array(get_class($this),'compareAcceptTypes'));
$this->_preferredAcceptTypes=$accepts;
}
return $this->_preferredAcceptTypes;
}
Возвращает массив принятых пользователем типов MIME в порядке приоритета. Каждый элемент массива содержит карту с типом, подтипом, базовым типом и параметрами (массив пар ключ-значение). См. parseAcceptHeader() для описания карты массива.
getPreferredLanguage() метод
public string getPreferredLanguage(array $languages=array ( )) | ||
| $languages | array | список языков, поддерживаемых приложением. Если пусто, этот метод вернёт первый язык, возвращённый [[getPreferredLanguages()]]. |
| {return} | string | язык, который приложение должно использовать. Возвращает false, если оба [[getPreferredLanguages()]] и `$languages` пустые. |
public function getPreferredLanguage($languages=array())
{
$preferredLanguages=$this->getPreferredLanguages();
if(empty($languages)) {
return !empty($preferredLanguages) ? CLocale::getCanonicalID($preferredLanguages[0]) : false;
}
foreach ($preferredLanguages as $preferredLanguage) {
$preferredLanguage=CLocale::getCanonicalID($preferredLanguage);
foreach ($languages as $language) {
$language=CLocale::getCanonicalID($language);
// en_us==en_us, en==en_us, en_us==en
if($language===$preferredLanguage || strpos($preferredLanguage,$language.'_')===0 || strpos($language,$preferredLanguage.'_')===0) {
return $language;
}
}
}
return reset($languages);
}
Возвращает предпочтительный язык пользователя, который должно использовать приложение. Решение языка основано на предпочтительных языках пользователя и языках, поддерживаемых приложением. Метод попытается найти наилучшее соответствие.
getPreferredLanguages() метод
public array getPreferredLanguages() | ||
| {return} | array | принятые пользователем языки в порядке приоритета. См. http://tools.ietf.org/html/rfc2616#section-14.4 |
public function getPreferredLanguages()
{
if($this->_preferredLanguages===null)
{
$sortedLanguages=array();
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && $n=preg_match_all('/([\w\-_]+)(?:\s*;\s*q\s*=\s*(\d*\.?\d*))?/',$_SERVER['HTTP_ACCEPT_LANGUAGE'],$matches))
{
$languages=array();
for($i=0;$i<$n;++$i)
{
$q=$matches[2][$i];
if($q==='')
$q=1;
if($q)
$languages[]=array((float)$q,$matches[1][$i]);
}
usort($languages,create_function('$a,$b','if($a[0]==$b[0]) {return 0;} return ($a[0]<$b[0]) ? 1 : -1;'));
foreach($languages as $language)
$sortedLanguages[]=$language[1];
}
$this->_preferredLanguages=$sortedLanguages;
}
return $this->_preferredLanguages;
}
Возвращает массив принятых пользователем языков в порядке приоритета. Идентификаторы языков, возвращённые методом, НЕ будут канонизированы с помощью CLocale::getCanonicalID.
getPut() метод (доступен с версии v1.1.7)
public mixed getPut(string $name, mixed $defaultValue=NULL) | ||
| $name | string | имя параметра PUT |
| $defaultValue | mixed | значение параметра по умолчанию, если параметр PUT не существует. |
| {return} | mixed | значение параметра PUT |
public function getPut($name,$defaultValue=null)
{
if($this->getIsPutViaPostRequest())
return $this->getPost($name, $defaultValue);
if($this->getIsPutRequest())
{
$restParams=$this->getRestParams();
return isset($restParams[$name]) ? $restParams[$name] : $defaultValue;
}
else
return $defaultValue;
}
Возвращает значение параметра PUT по имени. Если параметр PUT не существует или текущий запрос не является запросом PUT, возвращается второе значение в методе. Если запрос PUT был протуннелирован через POST с помощью параметра _method, будет возвращено значение параметра POST (доступно с версии 1.1.11).
getQuery() метод
public mixed getQuery(string $name, mixed $defaultValue=NULL) | ||
| $name | string | имя параметра GET |
| $defaultValue | mixed | значение параметра по умолчанию, если параметр GET не существует. |
| {return} | mixed | значение параметра GET |
public function getQuery($name,$defaultValue=null)
{
return isset($_GET[$name]) ? $_GET[$name] : $defaultValue;
}
Возвращает значение параметра GET по имени. Если параметр GET не существует, возвращается второе значение в методе.
getQueryString() метод
public string getQueryString() | ||
| {return} | string | часть URL запроса после вопросительного знака |
public function getQueryString()
{
return isset($_SERVER['QUERY_STRING'])?$_SERVER['QUERY_STRING']:'';
}
Возвращает часть URL запроса после вопросительного знака.
getRawBody() метод (доступен с версии v1.1.13)
public string getRawBody() | ||
| {return} | string | тело запроса |
public function getRawBody()
{
static $rawBody;
if($rawBody===null)
$rawBody=file_get_contents('php://input');
return $rawBody;
}
Возвращает тело HTTP-запроса в сыром виде.
getRequestType() метод
public string getRequestType() | ||
| {return} | string | тип запроса, например GET, POST, HEAD, PUT, PATCH, DELETE. |
public function getRequestType()
{
if(isset($_POST['_method']))
return strtoupper($_POST['_method']);
elseif(isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']))
return strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
return strtoupper(isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD']:'GET');
}
Возвращает тип запроса, например GET, POST, HEAD, PUT, PATCH, DELETE. Тип запроса можно вручную установить в запросах POST с параметром _method. Полезно для RESTful запросов из старых браузеров, которые не поддерживают PUT, PATCH или DELETE напрямую (доступно с версии 1.1.11).
getRequestUri() метод
public string getRequestUri() | ||
| {return} | string | часть URI запроса для текущего запрашиваемого URL. |
public function getRequestUri()
{
if($this->_requestUri===null)
{
if(isset($_SERVER['HTTP_X_REWRITE_URL'])) // IIS
$this->_requestUri=$_SERVER['HTTP_X_REWRITE_URL'];
elseif(isset($_SERVER['REQUEST_URI']))
{
$this->_requestUri=$_SERVER['REQUEST_URI'];
if(!empty($_SERVER['HTTP_HOST']))
{
if(strpos($this->_requestUri,$_SERVER['HTTP_HOST'])!==false)
$this->_requestUri=preg_replace('/^\w+:\/\/[^\/]+/','',$this->_requestUri);
}
else
$this->_requestUri=preg_replace('/^(http|https):\/\/[^\/]+/i','',$this->_requestUri);
}
elseif(isset($_SERVER['ORIG_PATH_INFO'])) // IIS 5.0 CGI
{
$this->_requestUri=$_SERVER['ORIG_PATH_INFO'];
if(!empty($_SERVER['QUERY_STRING']))
$this->_requestUri.='?'.$_SERVER['QUERY_STRING'];
}
else
throw new CException(Yii::t('yii','CHttpRequest is unable to determine the request URI.'));
}
return $this->_requestUri;
}
Возвращает часть URI запроса для текущего запрашиваемого URL. Это часть, которая следует за частью host info. Она включает часть query string, если она есть. Реализация этого метода ссылается на Zend_Controller_Request_Http в Zend Framework.
getRestParams() метод (доступен с версии v1.1.13, метод стал публичным)
public array getRestParams() | ||
| {return} | array | параметры запроса |
public function getRestParams()
{
if($this->_restParams===null)
{
$result=array();
if (strncmp($this->getContentType(), 'application/json', 16) === 0)
$result = CJSON::decode($this->getRawBody(), $this->jsonAsArray);
elseif(function_exists('mb_parse_str'))
mb_parse_str($this->getRawBody(), $result);
else
parse_str($this->getRawBody(), $result);
$this->_restParams=$result;
}
return $this->_restParams;
}
Возвращает параметры запроса. Обычно PUT, PATCH или DELETE.
getScriptFile() метод
public string getScriptFile() | ||
| {return} | string | путь к файлу скрипта входа (обрабатывается с помощью realpath()) |
public function getScriptFile()
{
if($this->_scriptFile!==null)
return $this->_scriptFile;
else
return $this->_scriptFile=realpath($_SERVER['SCRIPT_FILENAME']);
}
Возвращает путь к файлу скрипта входа.
getScriptUrl() метод
public string getScriptUrl() | ||
| {return} | string | относительный URL скрипта входа. |
public function getScriptUrl()
{
if($this->_scriptUrl===null)
{
$scriptName=basename($_SERVER['SCRIPT_FILENAME']);
if(basename($_SERVER['SCRIPT_NAME'])===$scriptName)
$this->_scriptUrl=$_SERVER['SCRIPT_NAME'];
elseif(basename($_SERVER['PHP_SELF'])===$scriptName)
$this->_scriptUrl=$_SERVER['PHP_SELF'];
elseif(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME'])===$scriptName)
$this->_scriptUrl=$_SERVER['ORIG_SCRIPT_NAME'];
elseif(($pos=strpos($_SERVER['PHP_SELF'],'/'.$scriptName))!==false)
$this->_scriptUrl=substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;
elseif(isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT'])===0)
$this->_scriptUrl=str_replace('\\','/',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME']));
else
throw new CException(Yii::t('yii','CHttpRequest is unable to determine the entry script URL.'));
}
return $this->_scriptUrl;
}
Возвращает относительный URL скрипта входа. Реализация этого метода ссылается на Zend_Controller_Request_Http в Zend Framework.
getSecurePort() метод (доступен с версии v1.1.3)
public integer getSecurePort() | ||
| {return} | integer | номер порта для защищённых запросов. |
public function getSecurePort()
{
if($this->_securePort===null)
$this->_securePort=$this->getIsSecureConnection() && isset($_SERVER['SERVER_PORT']) ? (int)$_SERVER['SERVER_PORT'] : 443;
return $this->_securePort;
}
Возвращает порт, используемый для защищённых запросов. По умолчанию 443 или порт, указанный сервером, если текущий запрос защищённый. Можно явно указать его, задав свойство securePort.
См. также
getServerName() метод
public string getServerName() | ||
| {return} | string | имя сервера |
public function getServerName()
{
return $_SERVER['SERVER_NAME'];
}
Возвращает имя сервера.
getServerPort() метод
public integer getServerPort() | ||
| {return} | integer | номер порта сервера |
public function getServerPort()
{
return $_SERVER['SERVER_PORT'];
}
Возвращает номер порта сервера.
getUrl() метод
public string getUrl() | ||
| {return} | строка | часть URL запроса после информации о хосте. |
public function getUrl()
{
return $this->getRequestUri();
}
Возвращает запрашиваемый URL. Это то же самое, что getRequestUri.
getUrlReferrer() метод
public string getUrlReferrer() | ||
| {return} | строка | ссылка на URL, null, если отсутствует |
public function getUrlReferrer()
{
return isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:null;
}
Возвращает ссылку на URL, null, если отсутствует
getUserAgent() метод
public string getUserAgent() | ||
| {return} | строка | user agent, null, если отсутствует |
public function getUserAgent()
{
return isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:null;
}
Возвращает user agent, null, если отсутствует.
getUserHost() метод
public string getUserHost() | ||
| {return} | строка | имя хоста пользователя, null, если не может быть определено |
public function getUserHost()
{
return isset($_SERVER['REMOTE_HOST'])?$_SERVER['REMOTE_HOST']:null;
}
Возвращает имя хоста пользователя, null, если оно не может быть определено.
getUserHostAddress() метод
public string getUserHostAddress() | ||
| {return} | строка | IP-адрес пользователя |
public function getUserHostAddress()
{
return isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'127.0.0.1';
}
Возвращает IP-адрес пользователя.
init() метод
public void init() |
public function init()
{
parent::init();
$this->normalizeRequest();
}
Инициализирует компонент приложения. Этот метод переопределяет родительскую реализацию, предварительно обрабатывая данные запроса пользователя.
normalizeRequest() метод
protected void normalizeRequest() |
protected function normalizeRequest()
{
// normalize request
if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
if(isset($_GET))
$_GET=$this->stripSlashes($_GET);
if(isset($_POST))
$_POST=$this->stripSlashes($_POST);
if(isset($_REQUEST))
$_REQUEST=$this->stripSlashes($_REQUEST);
if(isset($_COOKIE))
$_COOKIE=$this->stripSlashes($_COOKIE);
}
if($this->enableCsrfValidation)
Yii::app()->attachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));
}
Нормализует данные запроса. Этот метод удаляет слеши из данных запроса, если get_magic_quotes_gpc() возвращает true. Также выполняется проверка CSRF, если enableCsrfValidation имеет значение true.
parseAcceptHeader() метод
public static array parseAcceptHeader(string $header) | ||
| $header | строка | значение заголовка accept для анализа |
| {return} | массив | принятые пользователем типы MIME. |
public static function parseAcceptHeader($header)
{
$matches=array();
$accepts=array();
// get individual entries with their type, subtype, basetype and params
preg_match_all('/(?:\G\s?,\s?|^)(\w+|\*)\/(\w+|\*)(?:\+(\w+))?|(?<!^)\G(?:\s?;\s?(\w+)=([\w\.]+))/',$header,$matches);
// the regexp should (in theory) always return an array of 6 arrays
if(count($matches)===6)
{
$i=0;
$itemLen=count($matches[1]);
while($i<$itemLen)
{
// fill out a content type
$accept=array(
'type'=>$matches[1][$i],
'subType'=>$matches[2][$i],
'baseType'=>null,
'params'=>array(),
);
// fill in the base type if it exists
if($matches[3][$i]!==null && $matches[3][$i]!=='')
$accept['baseType']=$matches[3][$i];
// continue looping while there is no new content type, to fill in all accompanying params
for($i++;$i<$itemLen;$i++)
{
// if the next content type is null, then the item is a param for the current content type
if($matches[1][$i]===null || $matches[1][$i]==='')
{
// if this is the quality param, convert it to a double
if($matches[4][$i]==='q')
{
// sanity check on q value
$q=(double)$matches[5][$i];
if($q>1)
$q=(double)1;
elseif($q<0)
$q=(double)0;
$accept['params'][$matches[4][$i]]=$q;
}
else
$accept['params'][$matches[4][$i]]=$matches[5][$i];
}
else
break;
}
// q defaults to 1 if not explicitly given
if(!isset($accept['params']['q']))
$accept['params']['q']=(double)1;
$accepts[] = $accept;
}
}
return $accepts;
}
Парсит HTTP заголовок Accept, возвращая карту массива со всеми частями каждой записи. Каждая запись массива состоит из карты с типом, подтипом, базовым типом и параметрами, картой массива параметров ключ-значение, обязательно включающей значение `q` (т.е. приоритет ранжирования) в виде числа с плавающей точкой. Например, значение заголовка Accept 'application/xhtml+xml;q=0.9;level=1' даст запись массива
array(
'type' => 'application',
'subType' => 'xhtml',
'baseType' => 'xml',
'params' => array(
'q' => 0.9,
'level' => '1',
),
)
Обратите внимание: Чтобы избежать большой сложности, не предпринимаются шаги для обеспечения правильного обращения со строками в кавычках. Если текст заголовка включает строки в кавычках, содержащие пробелы или символы , или ;, результаты могут быть некорректными!
См. также http://tools.ietf.org/html/rfc2616#section-14.1 для получения подробной информации о заголовке Accept.
redirect() метод
public void redirect(string $url, boolean $terminate=true, integer $statusCode=302) | ||
| $url | строка | URL для перенаправления. Обратите внимание, что если URL не абсолютный (не начинается с "/"), он будет относительным к текущему URL запроса. |
| $terminate | логическое | прекратить ли текущее приложение |
| $statusCode | целое | код HTTP-статуса. По умолчанию 302. См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html для получения подробной информации о коде HTTP-статуса. |
public function redirect($url,$terminate=true,$statusCode=302)
{
if(strpos($url,'/')===0 && strpos($url,'//')!==0)
$url=$this->getHostInfo().$url;
header('Location: '.$url, true, $statusCode);
if($terminate)
Yii::app()->end();
}
Перенаправляет браузер на указанный URL.
sendFile() метод
public void sendFile(string $fileName, string $content, string $mimeType=NULL, boolean $terminate=true) | ||
| $fileName | строка | имя файла |
| $content | строка | содержание, которое нужно установить. |
| $mimeType | строка | тип MIME содержимого. Если null, он будет автоматически определен на основе имени файла. |
| $terminate | логическое | прекратить ли текущее приложение после вызова этого метода |
public function sendFile($fileName,$content,$mimeType=null,$terminate=true)
{
if($mimeType===null)
{
if(($mimeType=CFileHelper::getMimeTypeByExtension($fileName))===null)
$mimeType='text/plain';
}
$fileSize=(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content));
$contentStart=0;
$contentEnd=$fileSize-1;
$httpVersion=$this->getHttpVersion();
if(isset($_SERVER['HTTP_RANGE']))
{
header('Accept-Ranges: bytes');
//client sent us a multibyte range, can not hold this one for now
if(strpos($_SERVER['HTTP_RANGE'],',')!==false)
{
header("Content-Range: bytes $contentStart-$contentEnd/$fileSize");
throw new CHttpException(416,'Requested Range Not Satisfiable');
}
$range=str_replace('bytes=','',$_SERVER['HTTP_RANGE']);
//range requests starts from "-", so it means that data must be dumped the end point.
if($range[0]==='-')
$contentStart=$fileSize-substr($range,1);
else
{
$range=explode('-',$range);
$contentStart=$range[0];
// check if the last-byte-pos presents in header
if((isset($range[1]) && is_numeric($range[1])))
$contentEnd=$range[1];
}
/* Check the range and make sure it's treated according to the specs.
* http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
*/
// End bytes can not be larger than $end.
$contentEnd=($contentEnd > $fileSize) ? $fileSize-1 : $contentEnd;
// Validate the requested range and return an error if it's not correct.
$wrongContentStart=($contentStart>$contentEnd || $contentStart>$fileSize-1 || $contentStart<0);
if($wrongContentStart)
{
header("Content-Range: bytes $contentStart-$contentEnd/$fileSize");
throw new CHttpException(416,'Requested Range Not Satisfiable');
}
header("HTTP/$httpVersion 206 Partial Content");
header("Content-Range: bytes $contentStart-$contentEnd/$fileSize");
}
else
header("HTTP/$httpVersion 200 OK");
$length=$contentEnd-$contentStart+1; // Calculate new content length
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Type: $mimeType");
header('Content-Length: '.$length);
header("Content-Disposition: attachment; filename=\"$fileName\"");
header('Content-Transfer-Encoding: binary');
$content=function_exists('mb_substr') ? mb_substr($content,$contentStart,$length,'8bit') : substr($content,$contentStart,$length);
if($terminate)
{
// clean up the application first because the file downloading could take long time
// which may cause timeout of some resources (such as DB connection)
ob_start();
Yii::app()->end(0,false);
ob_end_clean();
echo $content;
exit(0);
}
else
echo $content;
}
Отправляет файл пользователю.
setBaseUrl() метод
public void setBaseUrl(string $value) | ||
| $value | строка | относительный URL для приложения |
public function setBaseUrl($value)
{
$this->_baseUrl=$value;
}
Устанавливает относительный URL для приложения. По умолчанию URL определяется на основе URL скрипта входа. Этот сеттер предоставляется в случае, если вы хотите изменить это поведение.
setHostInfo() метод
public void setHostInfo(string $value) | ||
| $value | строка | схема и часть имени хоста URL приложения. |
public function setHostInfo($value)
{
$this->_hostInfo=rtrim($value,'/');
}
Устанавливает схему и часть имени хоста URL приложения. Этот сеттер предоставляется в случае, если схему и имя хоста нельзя определить на определенных веб-серверах.
setPort() метод (доступен с версии v1.1.3)
public void setPort(integer $value) | ||
| $value | целое | номер порта. |
public function setPort($value)
{
$this->_port=(int)$value;
$this->_hostInfo=null;
}
Устанавливает порт для использования для небезопасных запросов. Этот сеттер предоставляется в случае необходимости настроить определенный порт для определенных конфигураций сервера.
setScriptUrl() метод
public void setScriptUrl(string $value) | ||
| $value | string | относительный URL-адрес скрипта входа в приложение. |
public function setScriptUrl($value)
{
$this->_scriptUrl='/'.trim($value,'/');
}
Устанавливает относительный URL-адрес скрипта входа в приложение. Этот метод-сеттер предоставляется на случай, если URL-адрес скрипта входа нельзя определить на некоторых веб-серверах.
setSecurePort() метод (доступен с версии 1.1.3)
public void setSecurePort(integer $value) | ||
| $value | integer | номер порта. |
public function setSecurePort($value)
{
$this->_securePort=(int)$value;
$this->_hostInfo=null;
}
Устанавливает порт для использования в защищенных запросах. Этот метод-сеттер предоставляется на случай, если для определённых конфигураций сервера необходим пользовательский порт.
stripSlashes() метод
public mixed stripSlashes(mixed &$data) | ||
| $data | mixed | входные данные для обработки |
| {return} | mixed | обработанные данные |
public function stripSlashes(&$data)
{
if(is_array($data))
{
if(count($data) == 0)
return $data;
$keys=array_map('stripslashes',array_keys($data));
$data=array_combine($keys,array_values($data));
return array_map(array($this,'stripSlashes'),$data);
}
else
return stripslashes($data);
}
Удаляет косые черты из входных данных. Этот метод применяется при включенном magic quotes.
validateCsrfToken() метод
public void validateCsrfToken(CEvent $event) | ||
| $event | CEvent | параметр события |
public function validateCsrfToken($event)
{
if ($this->getIsPostRequest() ||
$this->getIsPutRequest() ||
$this->getIsPatchRequest() ||
$this->getIsDeleteRequest())
{
$cookies=$this->getCookies();
$method=$this->getRequestType();
switch($method)
{
case 'POST':
$maskedUserToken=$this->getPost($this->csrfTokenName);
break;
case 'PUT':
$maskedUserToken=$this->getPut($this->csrfTokenName);
break;
case 'PATCH':
$maskedUserToken=$this->getPatch($this->csrfTokenName);
break;
case 'DELETE':
$maskedUserToken=$this->getDelete($this->csrfTokenName);
}
if (!empty($maskedUserToken) && $cookies->contains($this->csrfTokenName))
{
$securityManager=Yii::app()->getSecurityManager();
$maskedCookieToken=$cookies->itemAt($this->csrfTokenName)->value;
$cookieToken=$securityManager->unmaskToken($maskedCookieToken);
$userToken=$securityManager->unmaskToken($maskedUserToken);
$valid=$cookieToken===$userToken;
}
else
$valid = false;
if (!$valid)
throw new CHttpException(400,Yii::t('yii','The CSRF token could not be verified.'));
}
}
Выполняет проверку CSRF. Это обработчик событий, реагирующий на CApplication::onBeginRequest. Стандартная реализация сравнивает токен CSRF, полученный из куки и из поля POST. Если они отличаются, то обнаруживается атака CSRF.
xSendFile() метод
public void xSendFile(string $filePath, array $options=array ( )) | ||
| $filePath | string | имя файла с полным путем |
| $options | array | дополнительные параметры:
|
public function xSendFile($filePath, $options=array())
{
if(!isset($options['forceDownload']) || $options['forceDownload'])
$disposition='attachment';
else
$disposition='inline';
if(!isset($options['saveName']))
$options['saveName']=basename($filePath);
if(!isset($options['mimeType']))
{
if(($options['mimeType']=CFileHelper::getMimeTypeByExtension($filePath))===null)
$options['mimeType']='text/plain';
}
if(!isset($options['xHeader']))
$options['xHeader']='X-Sendfile';
if($options['mimeType']!==null)
header('Content-Type: '.$options['mimeType']);
header('Content-Disposition: '.$disposition.'; filename="'.$options['saveName'].'"');
if(isset($options['addHeaders']))
{
foreach($options['addHeaders'] as $header=>$value)
header($header.': '.$value);
}
header(trim($options['xHeader']).': '.$filePath);
if(!isset($options['terminate']) || $options['terminate'])
Yii::app()->end();
}
Отправляет существующий файл в браузер для загрузки с помощью x-sendfile.
X-Sendfile — это функция, позволяющая веб-приложению перенаправлять запрос на файл веб-серверу, который, в свою очередь, обрабатывает запрос, тем самым исключая необходимость выполнения задач, таких как чтение файла и отправка его пользователю. При работе с большим количеством файлов (или очень большими файлами) это может привести к значительному увеличению производительности, поскольку веб-приложению разрешено завершить работу раньше, пока веб-сервер обрабатывает запрос.
Запрос отправляется на сервер через специальный нестандартный HTTP-заголовок. Когда веб-сервер обнаруживает наличие такого заголовка, он отбрасывает весь вывод и отправляет указанный файл с помощью внутренних механизмов веб-сервера, включая все оптимизации, такие как кэширующие заголовки.
Так как этот заголовок нестандартный, для различных веб-серверов существуют различные директивы:
- Apache: X-Sendfile
- Lighttpd v1.4: X-LIGHTTPD-send-file
- Lighttpd v1.5: X-Sendfile
- Nginx: X-Accel-Redirect
- Cherokee: X-Sendfile и X-Accel-Redirect
Примечание: Этот параметр позволяет загружать файлы, которые не находятся в веб-папках, а также файлы, которые в противном случае защищены (запрещено всем), такие как .htaccess
Побочные эффекты: Если этот параметр отключён на веб-сервере, при вызове этого метода откроется диалоговое окно настройки загрузки, но загруженный файл будет иметь 0 байт.
Известные проблемы: Существует ошибка с Internet Explorer 6, 7 и 8, когда X-SENDFILE используется по защищённому соединению (SSL), он будет отображать сообщение об ошибке: «Internet Explorer не смог открыть этот интернет-сайт. Запрашиваемый сайт недоступен или не найден». Вы можете обойти эту проблему, удалив заголовок
Pragma. Пример:
<?php
Yii::app()->request->xSendFile('/home/user/Pictures/picture1.jpg',array(
'saveName'=>'image1.jpg',
'mimeType'=>'image/jpeg',
'terminate'=>false,
));
?>
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CHttpRequest