CHttpRequest
鍖 | system.web |
---|---|
缁ф壙 | class CHttpRequest » CApplicationComponent » CComponent |
瀹炵幇 | IApplicationComponent |
婧愯嚜 | 1.0 |
鐗堟湰 | $Id: CHttpRequest.php 3560 2012-02-10 14:13:00Z mdomba $ |
婧愮爜 | framework/web/CHttpRequest.php |
CHttpRequest also manages the cookies sent from and sent to the user. By setting enableCookieValidation to true, cookies sent from the user will be validated to see if they are tampered. The property cookies returns the collection of cookies. For more details, see CCookieCollection.
CHttpRequest is a default application component loaded by CWebApplication. It can be accessed via CWebApplication::getRequest().
鍏叡灞炴
灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|---|
acceptTypes | string | Returns user browser accept types, null if not present. | CHttpRequest |
baseUrl | string | Returns the relative URL for the application. | CHttpRequest |
behaviors | array | 杩欎釜搴旂敤缁勪欢闄勫姞鐨勮涓恒 杩欐琛屼负灏嗗湪搴旂敤缁勪欢璋冪敤init鏃堕檮鍔犲湪搴旂敤缁勪欢涓娿 璇峰弬鐓CModel::behaviors濡備綍鎸囧畾姝ゅ睘鎬у笺 | CApplicationComponent |
browser | array | Returns information about the capabilities of user browser. | CHttpRequest |
cookies | CCookieCollection | Returns the cookie collection. | CHttpRequest |
csrfCookie | array | the property values (in name-value pairs) used to initialize the CSRF cookie. | CHttpRequest |
csrfToken | string | Returns the random token used to perform CSRF validation. | CHttpRequest |
csrfTokenName | string | the name of the token used to prevent CSRF. | CHttpRequest |
enableCookieValidation | boolean | whether cookies should be validated to ensure they are not tampered. | CHttpRequest |
enableCsrfValidation | boolean | whether to enable CSRF (Cross-Site Request Forgery) validation. | CHttpRequest |
hostInfo | string | Returns the schema and host part of the application URL. | CHttpRequest |
isAjaxRequest | boolean | Returns whether this is an AJAX (XMLHttpRequest) request. | CHttpRequest |
isDeleteRequest | boolean | Returns whether this is a DELETE request. | CHttpRequest |
isInitialized | boolean | 妫鏌ュ簲鐢ㄧ粍浠舵槸鍚﹀凡缁忓垵濮嬪寲銆 | CApplicationComponent |
isPostRequest | boolean | Returns whether this is a POST request. | CHttpRequest |
isPutRequest | boolean | Returns whether this is a PUT request. | CHttpRequest |
isSecureConnection | boolean | Return if the request is sent via secure channel (https). | CHttpRequest |
pathInfo | string | Returns the path info of the currently requested URL. | CHttpRequest |
port | integer | Returns the port to use for insecure requests. | CHttpRequest |
preferredLanguage | string | Returns the user preferred language. | CHttpRequest |
queryString | string | Returns part of the request URL that is after the question mark. | CHttpRequest |
requestType | string | Returns the request type, such as GET, POST, HEAD, PUT, DELETE. | CHttpRequest |
requestUri | string | Returns the request URI portion for the currently requested URL. | CHttpRequest |
scriptFile | string | Returns entry script file path. | CHttpRequest |
scriptUrl | string | Returns the relative URL of the entry script. | CHttpRequest |
securePort | integer | Returns the port to use for secure requests. | CHttpRequest |
serverName | string | Returns the server name. | CHttpRequest |
serverPort | integer | Returns the server port number. | CHttpRequest |
url | string | Returns the currently requested URL. | CHttpRequest |
urlReferrer | string | Returns the URL referrer, null if not present | CHttpRequest |
userAgent | string | Returns the user agent, null if not present. | CHttpRequest |
userHost | string | Returns the user host name, null if it cannot be determined. | CHttpRequest |
userHostAddress | string | Returns the user IP address. | CHttpRequest |
鍙椾繚鎶ゅ睘鎬
灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|---|
restParams | array | Returns the PUT or DELETE request parameters. | 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 |
detachBehavior() | 浠庣粍浠朵腑鍒嗙涓涓涓恒 | CComponent |
detachBehaviors() | 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 | CComponent |
detachEventHandler() | 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 | CComponent |
disableBehavior() | 绂佺敤涓涓檮鍔犺涓恒 | CComponent |
disableBehaviors() | 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 | CComponent |
enableBehavior() | 鍚敤涓涓檮鍔犺涓恒 | CComponent |
enableBehaviors() | 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 | CComponent |
evaluateExpression() | 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 | CComponent |
getAcceptTypes() | Returns user browser accept types, null if not present. | CHttpRequest |
getBaseUrl() | Returns the relative URL for the application. | CHttpRequest |
getBrowser() | Returns information about the capabilities of user browser. | CHttpRequest |
getCookies() | Returns the cookie collection. | CHttpRequest |
getCsrfToken() | Returns the random token used to perform CSRF validation. | CHttpRequest |
getDelete() | Returns the named DELETE parameter value. | CHttpRequest |
getEventHandlers() | 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 | CComponent |
getHostInfo() | Returns the schema and host part of the application URL. | CHttpRequest |
getIsAjaxRequest() | Returns whether this is an AJAX (XMLHttpRequest) request. | CHttpRequest |
getIsDeleteRequest() | Returns whether this is a DELETE request. | CHttpRequest |
getIsInitialized() | 妫鏌ュ簲鐢ㄧ粍浠舵槸鍚﹀凡缁忓垵濮嬪寲銆 | CApplicationComponent |
getIsPostRequest() | Returns whether this is a POST request. | CHttpRequest |
getIsPutRequest() | Returns whether this is a PUT request. | CHttpRequest |
getIsSecureConnection() | Return if the request is sent via secure channel (https). | CHttpRequest |
getParam() | Returns the named GET or POST parameter value. | CHttpRequest |
getPathInfo() | Returns the path info of the currently requested URL. | CHttpRequest |
getPort() | Returns the port to use for insecure requests. | CHttpRequest |
getPost() | Returns the named POST parameter value. | CHttpRequest |
getPreferredLanguage() | Returns the user preferred language. | CHttpRequest |
getPut() | Returns the named PUT parameter value. | CHttpRequest |
getQuery() | Returns the named GET parameter value. | CHttpRequest |
getQueryString() | Returns part of the request URL that is after the question mark. | CHttpRequest |
getRequestType() | Returns the request type, such as GET, POST, HEAD, PUT, DELETE. | CHttpRequest |
getRequestUri() | Returns the request URI portion for the currently requested URL. | CHttpRequest |
getScriptFile() | Returns entry script file path. | CHttpRequest |
getScriptUrl() | Returns the relative URL of the entry script. | CHttpRequest |
getSecurePort() | Returns the port to use for secure requests. | CHttpRequest |
getServerName() | Returns the server name. | CHttpRequest |
getServerPort() | Returns the server port number. | CHttpRequest |
getUrl() | Returns the currently requested URL. | CHttpRequest |
getUrlReferrer() | Returns the URL referrer, null if not present | CHttpRequest |
getUserAgent() | Returns the user agent, null if not present. | CHttpRequest |
getUserHost() | Returns the user host name, null if it cannot be determined. | CHttpRequest |
getUserHostAddress() | Returns the user IP address. | CHttpRequest |
hasEvent() | 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 | CComponent |
hasEventHandler() | 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 | CComponent |
hasProperty() | 纭畾灞炴ф槸鍚﹁瀹氫箟銆 | CComponent |
init() | Initializes the application component. | CHttpRequest |
raiseEvent() | 鍙戣捣涓涓簨浠躲 | CComponent |
redirect() | Redirects the browser to the specified URL. | CHttpRequest |
sendFile() | Sends a file to user. | CHttpRequest |
setBaseUrl() | Sets the relative URL for the application. | CHttpRequest |
setHostInfo() | Sets the schema and host part of the application URL. | CHttpRequest |
setPort() | Sets the port to use for insecure requests. | CHttpRequest |
setScriptUrl() | Sets the relative URL for the application entry script. | CHttpRequest |
setSecurePort() | Sets the port to use for secure requests. | CHttpRequest |
stripSlashes() | Strips slashes from input data. | CHttpRequest |
validateCsrfToken() | Performs the CSRF validation. | CHttpRequest |
xSendFile() | Sends existing file to a browser as a download using x-sendfile. | CHttpRequest |
鍙椾繚鎶ゆ柟娉
鏂规硶 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|
createCsrfCookie() | Creates a cookie with a randomly generated CSRF token. | CHttpRequest |
decodePathInfo() | Decodes the path info. | CHttpRequest |
getRestParams() | Returns the PUT or DELETE request parameters. | CHttpRequest |
normalizeRequest() | Normalizes the request data. | CHttpRequest |
灞炴ц缁
Returns user browser accept types, null if not present.
Returns the relative URL for the application. This is similar to scriptUrl except that it does not have the script file name, and the ending slashes are stripped off.
鍙傝
Returns information about the capabilities of user browser.
Returns the cookie collection. The result can be used like an associative array. Adding CHttpCookie objects to the collection will send the cookies to the client; and removing the objects from the collection will delete those cookies on the client.
the property values (in name-value pairs) used to initialize the CSRF cookie. Any property of CHttpCookie may be initialized. This property is effective only when enableCsrfValidation is true.
Returns the random token used to perform CSRF validation. The token will be read from cookie first. If not found, a new token will be generated.
the name of the token used to prevent CSRF. Defaults to 'YII_CSRF_TOKEN'. This property is effectively only when enableCsrfValidation is true.
whether cookies should be validated to ensure they are not tampered. Defaults to false.
whether to enable CSRF (Cross-Site Request Forgery) validation. Defaults to false. By setting this property to true, forms submitted to an Yii Web application must be originated from the same application. If not, a 400 HTTP exception will be raised. Note, this feature requires that the user client accepts cookie. You also need to use CHtml::form or CHtml::statefulForm to generate the needed HTML forms in your pages.
Returns the schema and host part of the application URL. The returned URL does not have an ending slash. By default this is determined based on the user request information. You may explicitly specify it by setting the hostInfo property.
鍙傝
Returns whether this is an AJAX (XMLHttpRequest) request.
Returns whether this is a DELETE request.
Returns whether this is a POST request.
Returns whether this is a PUT request.
Return if the request is sent via secure channel (https).
Returns the path info of the currently requested URL. This refers to the part that is after the entry script and before the question mark. The starting and ending slashes are stripped off.
Returns the port to use for insecure requests. Defaults to 80, or the port specified by the server if the current request is insecure. You may explicitly specify it by setting the port property.
鍙傝
Returns the user preferred language. The returned language ID will be canonicalized using CLocale::getCanonicalID. This method returns false if the user does not have language preference.
Returns part of the request URL that is after the question mark.
Returns the request type, such as GET, POST, HEAD, PUT, DELETE.
Returns the request URI portion for the currently requested URL. This refers to the portion that is after the host info part. It includes the query string part if any. The implementation of this method referenced Zend_Controller_Request_Http in Zend Framework.
Returns the PUT or DELETE request parameters.
Returns entry script file path.
Returns the relative URL of the entry script. The implementation of this method referenced Zend_Controller_Request_Http in Zend Framework.
Returns the port to use for secure requests. Defaults to 443, or the port specified by the server if the current request is secure. You may explicitly specify it by setting the securePort property.
鍙傝
Returns the server name.
Returns the server port number.
Returns the currently requested URL. This is the same as getRequestUri.
Returns the URL referrer, null if not present
Returns the user agent, null if not present.
Returns the user host name, null if it cannot be determined.
Returns the user IP address.
鏂规硶璇︾粏
protected CHttpCookie createCsrfCookie()
| ||
{return} | CHttpCookie | the generated cookie |
protected function createCsrfCookie()
{
$cookie=new CHttpCookie($this->csrfTokenName,sha1(uniqid(mt_rand(),true)));
if(is_array($this->csrfCookie))
{
foreach($this->csrfCookie as $name=>$value)
$cookie->$name=$value;
}
return $cookie;
}
Creates a cookie with a randomly generated CSRF token. Initial values specified in csrfCookie will be applied to the generated cookie.
protected string decodePathInfo(string $pathInfo)
| ||
$pathInfo | string | encoded path info |
{return} | string | decoded path info |
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);
}
}
Decodes the path info. This method is an improved variant of the native urldecode() function and used in getPathInfo() to decode the path part of the request URI. You may override this method to change the way the path info is being decoded.
public string getAcceptTypes()
| ||
{return} | string | user browser accept types, null if not present |
public function getAcceptTypes()
{
return isset($_SERVER['HTTP_ACCEPT'])?$_SERVER['HTTP_ACCEPT']:null;
}
Returns user browser accept types, null if not present.
public string getBaseUrl(boolean $absolute=false)
| ||
$absolute | boolean | whether to return an absolute URL. Defaults to false, meaning returning a relative one. |
{return} | string | the relative URL for the application |
public function getBaseUrl($absolute=false)
{
if($this->_baseUrl===null)
$this->_baseUrl=rtrim(dirname($this->getScriptUrl()),'\\/');
return $absolute ? $this->getHostInfo() . $this->_baseUrl : $this->_baseUrl;
}
Returns the relative URL for the application. This is similar to scriptUrl except that it does not have the script file name, and the ending slashes are stripped off.
鍙傝
public array getBrowser(string $userAgent=NULL)
| ||
$userAgent | string | the user agent to be analyzed. Defaults to null, meaning using the current User-Agent HTTP header information. |
{return} | array | user browser capabilities. |
public function getBrowser($userAgent=null)
{
return get_browser($userAgent,true);
}
Returns information about the capabilities of user browser.
public CCookieCollection getCookies()
| ||
{return} | CCookieCollection | the cookie collection. |
public function getCookies()
{
if($this->_cookies!==null)
return $this->_cookies;
else
return $this->_cookies=new CCookieCollection($this);
}
Returns the cookie collection. The result can be used like an associative array. Adding CHttpCookie objects to the collection will send the cookies to the client; and removing the objects from the collection will delete those cookies on the client.
public string getCsrfToken()
| ||
{return} | string | the random token for CSRF validation. |
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;
}
Returns the random token used to perform CSRF validation. The token will be read from cookie first. If not found, a new token will be generated.
public mixed getDelete(string $name, mixed $defaultValue=NULL)
| ||
$name | string | the DELETE parameter name |
$defaultValue | mixed | the default parameter value if the DELETE parameter does not exist. |
{return} | mixed | the DELETE parameter value |
public function getDelete($name,$defaultValue=null)
{
if($this->_deleteParams===null)
$this->_deleteParams=$this->getIsDeleteRequest() ? $this->getRestParams() : array();
return isset($this->_deleteParams[$name]) ? $this->_deleteParams[$name] : $defaultValue;
}
Returns the named DELETE parameter value. If the DELETE parameter does not exist or if the current request is not a DELETE request, the second parameter to this method will be returned.
public string getHostInfo(string $schema='')
| ||
$schema | string | schema to use (e.g. http, https). If empty, the schema used for the current request will be used. |
{return} | string | schema and hostname part (with port number if needed) of the request URL (e.g. 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;
}
Returns the schema and host part of the application URL. The returned URL does not have an ending slash. By default this is determined based on the user request information. You may explicitly specify it by setting the hostInfo property.
鍙傝
public boolean getIsAjaxRequest()
| ||
{return} | boolean | whether this is an AJAX (XMLHttpRequest) request. |
public function getIsAjaxRequest()
{
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';
}
Returns whether this is an AJAX (XMLHttpRequest) request.
public boolean getIsDeleteRequest()
| ||
{return} | boolean | whether this is a DELETE request. |
public function getIsDeleteRequest()
{
return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'DELETE');
}
Returns whether this is a DELETE request.
public boolean getIsPostRequest()
| ||
{return} | boolean | whether this is a POST request. |
public function getIsPostRequest()
{
return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'POST');
}
Returns whether this is a POST request.
public boolean getIsPutRequest()
| ||
{return} | boolean | whether this is a PUT request. |
public function getIsPutRequest()
{
return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'PUT');
}
Returns whether this is a PUT request.
public boolean getIsSecureConnection()
| ||
{return} | boolean | if the request is sent via secure channel (https) |
public function getIsSecureConnection()
{
return isset($_SERVER['HTTPS']) && !strcasecmp($_SERVER['HTTPS'],'on');
}
Return if the request is sent via secure channel (https).
public mixed getParam(string $name, mixed $defaultValue=NULL)
| ||
$name | string | the GET parameter name |
$defaultValue | mixed | the default parameter value if the GET parameter does not exist. |
{return} | mixed | the GET parameter value |
public function getParam($name,$defaultValue=null)
{
return isset($_GET[$name]) ? $_GET[$name] : (isset($_POST[$name]) ? $_POST[$name] : $defaultValue);
}
Returns the named GET or POST parameter value. If the GET or POST parameter does not exist, the second parameter to this method will be returned. If both GET and POST contains such a named parameter, the GET parameter takes precedence.
public string getPathInfo()
| ||
{return} | string | part of the request URL that is after the entry script and before the question mark. Note, the returned pathinfo is decoded starting from 1.1.4. Prior to 1.1.4, whether it is decoded or not depends on the server configuration (in most cases it is not decoded). |
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));
else if($baseUrl==='' || strpos($pathInfo,$baseUrl)===0)
$pathInfo=substr($pathInfo,strlen($baseUrl));
else if(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.'));
$this->_pathInfo=trim($pathInfo,'/');
}
return $this->_pathInfo;
}
Returns the path info of the currently requested URL. This refers to the part that is after the entry script and before the question mark. The starting and ending slashes are stripped off.
public integer getPort()
| ||
{return} | integer | port number for insecure requests. |
public function getPort()
{
if($this->_port===null)
$this->_port=!$this->getIsSecureConnection() && isset($_SERVER['SERVER_PORT']) ? (int)$_SERVER['SERVER_PORT'] : 80;
return $this->_port;
}
Returns the port to use for insecure requests. Defaults to 80, or the port specified by the server if the current request is insecure. You may explicitly specify it by setting the port property.
鍙傝
public mixed getPost(string $name, mixed $defaultValue=NULL)
| ||
$name | string | the POST parameter name |
$defaultValue | mixed | the default parameter value if the POST parameter does not exist. |
{return} | mixed | the POST parameter value |
public function getPost($name,$defaultValue=null)
{
return isset($_POST[$name]) ? $_POST[$name] : $defaultValue;
}
Returns the named POST parameter value. If the POST parameter does not exist, the second parameter to this method will be returned.
public string getPreferredLanguage()
| ||
{return} | string | the user preferred language. |
public function getPreferredLanguage()
{
if($this->_preferredLanguage===null)
{
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && ($n=preg_match_all('/([\w\-_]+)\s*(;\s*q\s*=\s*(\d*\.\d*))?/',$_SERVER['HTTP_ACCEPT_LANGUAGE'],$matches))>0)
{
$languages=array();
for($i=0;$i<$n;++$i)
$languages[$matches[1][$i]]=empty($matches[3][$i]) ? 1.0 : floatval($matches[3][$i]);
arsort($languages);
foreach($languages as $language=>$pref)
return $this->_preferredLanguage=CLocale::getCanonicalID($language);
}
return $this->_preferredLanguage=false;
}
return $this->_preferredLanguage;
}
Returns the user preferred language. The returned language ID will be canonicalized using CLocale::getCanonicalID. This method returns false if the user does not have language preference.
public mixed getPut(string $name, mixed $defaultValue=NULL)
| ||
$name | string | the PUT parameter name |
$defaultValue | mixed | the default parameter value if the PUT parameter does not exist. |
{return} | mixed | the PUT parameter value |
public function getPut($name,$defaultValue=null)
{
if($this->_putParams===null)
$this->_putParams=$this->getIsPutRequest() ? $this->getRestParams() : array();
return isset($this->_putParams[$name]) ? $this->_putParams[$name] : $defaultValue;
}
Returns the named PUT parameter value. If the PUT parameter does not exist or if the current request is not a PUT request, the second parameter to this method will be returned.
public mixed getQuery(string $name, mixed $defaultValue=NULL)
| ||
$name | string | the GET parameter name |
$defaultValue | mixed | the default parameter value if the GET parameter does not exist. |
{return} | mixed | the GET parameter value |
public function getQuery($name,$defaultValue=null)
{
return isset($_GET[$name]) ? $_GET[$name] : $defaultValue;
}
Returns the named GET parameter value. If the GET parameter does not exist, the second parameter to this method will be returned.
public string getQueryString()
| ||
{return} | string | part of the request URL that is after the question mark |
public function getQueryString()
{
return isset($_SERVER['QUERY_STRING'])?$_SERVER['QUERY_STRING']:'';
}
Returns part of the request URL that is after the question mark.
public string getRequestType()
| ||
{return} | string | request type, such as GET, POST, HEAD, PUT, DELETE. |
public function getRequestType()
{
return strtoupper(isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD']:'GET');
}
Returns the request type, such as GET, POST, HEAD, PUT, DELETE.
public string getRequestUri()
| ||
{return} | string | the request URI portion for the currently requested URL. |
public function getRequestUri()
{
if($this->_requestUri===null)
{
if(isset($_SERVER['HTTP_X_REWRITE_URL'])) // IIS
$this->_requestUri=$_SERVER['HTTP_X_REWRITE_URL'];
else if(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);
}
else if(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;
}
Returns the request URI portion for the currently requested URL. This refers to the portion that is after the host info part. It includes the query string part if any. The implementation of this method referenced Zend_Controller_Request_Http in Zend Framework.
protected array getRestParams()
| ||
{return} | array | the request parameters |
protected function getRestParams()
{
$result=array();
if(function_exists('mb_parse_str'))
mb_parse_str(file_get_contents('php://input'), $result);
else
parse_str(file_get_contents('php://input'), $result);
return $result;
}
Returns the PUT or DELETE request parameters.
public string getScriptFile()
| ||
{return} | string | entry script file path (processed w/ realpath()) |
public function getScriptFile()
{
if($this->_scriptFile!==null)
return $this->_scriptFile;
else
return $this->_scriptFile=realpath($_SERVER['SCRIPT_FILENAME']);
}
Returns entry script file path.
public string getScriptUrl()
| ||
{return} | string | the relative URL of the entry script. |
public function getScriptUrl()
{
if($this->_scriptUrl===null)
{
$scriptName=basename($_SERVER['SCRIPT_FILENAME']);
if(basename($_SERVER['SCRIPT_NAME'])===$scriptName)
$this->_scriptUrl=$_SERVER['SCRIPT_NAME'];
else if(basename($_SERVER['PHP_SELF'])===$scriptName)
$this->_scriptUrl=$_SERVER['PHP_SELF'];
else if(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME'])===$scriptName)
$this->_scriptUrl=$_SERVER['ORIG_SCRIPT_NAME'];
else if(($pos=strpos($_SERVER['PHP_SELF'],'/'.$scriptName))!==false)
$this->_scriptUrl=substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;
else if(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;
}
Returns the relative URL of the entry script. The implementation of this method referenced Zend_Controller_Request_Http in Zend Framework.
public integer getSecurePort()
| ||
{return} | integer | port number for secure requests. |
public function getSecurePort()
{
if($this->_securePort===null)
$this->_securePort=$this->getIsSecureConnection() && isset($_SERVER['SERVER_PORT']) ? (int)$_SERVER['SERVER_PORT'] : 443;
return $this->_securePort;
}
Returns the port to use for secure requests. Defaults to 443, or the port specified by the server if the current request is secure. You may explicitly specify it by setting the securePort property.
鍙傝
public string getServerName()
| ||
{return} | string | server name |
public function getServerName()
{
return $_SERVER['SERVER_NAME'];
}
Returns the server name.
public integer getServerPort()
| ||
{return} | integer | server port number |
public function getServerPort()
{
return $_SERVER['SERVER_PORT'];
}
Returns the server port number.
public string getUrl()
| ||
{return} | string | part of the request URL after the host info. |
public function getUrl()
{
return $this->getRequestUri();
}
Returns the currently requested URL. This is the same as getRequestUri.
public string getUrlReferrer()
| ||
{return} | string | URL referrer, null if not present |
public function getUrlReferrer()
{
return isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:null;
}
Returns the URL referrer, null if not present
public string getUserAgent()
| ||
{return} | string | user agent, null if not present |
public function getUserAgent()
{
return isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:null;
}
Returns the user agent, null if not present.
public string getUserHost()
| ||
{return} | string | user host name, null if cannot be determined |
public function getUserHost()
{
return isset($_SERVER['REMOTE_HOST'])?$_SERVER['REMOTE_HOST']:null;
}
Returns the user host name, null if it cannot be determined.
public string getUserHostAddress()
| ||
{return} | string | user IP address |
public function getUserHostAddress()
{
return isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'127.0.0.1';
}
Returns the user IP address.
public void init()
|
public function init()
{
parent::init();
$this->normalizeRequest();
}
Initializes the application component. This method overrides the parent implementation by preprocessing the user request data.
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'));
}
Normalizes the request data. This method strips off slashes in request data if get_magic_quotes_gpc() returns true. It also performs CSRF validation if enableCsrfValidation is true.
public void redirect(string $url, boolean $terminate=true, integer $statusCode=302)
| ||
$url | string | URL to be redirected to. If the URL is a relative one, the base URL of the application will be inserted at the beginning. |
$terminate | boolean | whether to terminate the current application |
$statusCode | integer | the HTTP status code. Defaults to 302. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for details about HTTP status code. |
public function redirect($url,$terminate=true,$statusCode=302)
{
if(strpos($url,'/')===0)
$url=$this->getHostInfo().$url;
header('Location: '.$url, true, $statusCode);
if($terminate)
Yii::app()->end();
}
Redirects the browser to the specified URL.
public void sendFile(string $fileName, string $content, string $mimeType=NULL, boolean $terminate=true)
| ||
$fileName | string | file name |
$content | string | content to be set. |
$mimeType | string | mime type of the content. If null, it will be guessed automatically based on the given file name. |
$terminate | boolean | whether to terminate the current application after calling this method |
public function sendFile($fileName,$content,$mimeType=null,$terminate=true)
{
if($mimeType===null)
{
if(($mimeType=CFileHelper::getMimeTypeByExtension($fileName))===null)
$mimeType='text/plain';
}
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-type: $mimeType");
if(ob_get_length()===false)
header('Content-Length: '.(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content)));
header("Content-Disposition: attachment; filename=\"$fileName\"");
header('Content-Transfer-Encoding: binary');
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)
Yii::app()->end(0,false);
echo $content;
exit(0);
}
else
echo $content;
}
Sends a file to user.
public void setBaseUrl(string $value)
| ||
$value | string | the relative URL for the application |
public function setBaseUrl($value)
{
$this->_baseUrl=$value;
}
Sets the relative URL for the application. By default the URL is determined based on the entry script URL. This setter is provided in case you want to change this behavior.
public void setHostInfo(string $value)
| ||
$value | string | the schema and host part of the application URL. |
public function setHostInfo($value)
{
$this->_hostInfo=rtrim($value,'/');
}
Sets the schema and host part of the application URL. This setter is provided in case the schema and hostname cannot be determined on certain Web servers.
public void setPort(integer $value)
| ||
$value | integer | port number. |
public function setPort($value)
{
$this->_port=(int)$value;
$this->_hostInfo=null;
}
Sets the port to use for insecure requests. This setter is provided in case a custom port is necessary for certain server configurations.
public void setScriptUrl(string $value)
| ||
$value | string | the relative URL for the application entry script. |
public function setScriptUrl($value)
{
$this->_scriptUrl='/'.trim($value,'/');
}
Sets the relative URL for the application entry script. This setter is provided in case the entry script URL cannot be determined on certain Web servers.
public void setSecurePort(integer $value)
| ||
$value | integer | port number. |
public function setSecurePort($value)
{
$this->_securePort=(int)$value;
$this->_hostInfo=null;
}
Sets the port to use for secure requests. This setter is provided in case a custom port is necessary for certain server configurations.
public mixed stripSlashes(mixed &$data)
| ||
$data | mixed | input data to be processed |
{return} | mixed | processed data |
public function stripSlashes(&$data)
{
return is_array($data)?array_map(array($this,'stripSlashes'),$data):stripslashes($data);
}
Strips slashes from input data. This method is applied when magic quotes is enabled.
public void validateCsrfToken(CEvent $event)
| ||
$event | CEvent | event parameter |
public function validateCsrfToken($event)
{
if($this->getIsPostRequest())
{
// only validate POST requests
$cookies=$this->getCookies();
if($cookies->contains($this->csrfTokenName) && isset($_POST[$this->csrfTokenName]))
{
$tokenFromCookie=$cookies->itemAt($this->csrfTokenName)->value;
$tokenFromPost=$_POST[$this->csrfTokenName];
$valid=$tokenFromCookie===$tokenFromPost;
}
else
$valid=false;
if(!$valid)
throw new CHttpException(400,Yii::t('yii','The CSRF token could not be verified.'));
}
}
Performs the CSRF validation. This is the event handler responding to CApplication::onBeginRequest. The default implementation will compare the CSRF token obtained from a cookie and from a POST field. If they are different, a CSRF attack is detected.
public void xSendFile(string $filePath, array $options=array (
))
| ||
$filePath | string | file name with full path |
$options | array | additional options:
|
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();
}
Sends existing file to a browser as a download using x-sendfile.
X-Sendfile is a feature allowing a web application to redirect the request for a file to the webserver
that in turn processes the request, this way eliminating the need to perform tasks like reading the file
and sending it to the user. When dealing with a lot of files (or very big files) this can lead to a great
increase in performance as the web application is allowed to terminate earlier while the webserver is
handling the request.
The request is sent to the server through a special non-standard HTTP-header.
When the web server encounters the presence of such header it will discard all output and send the file
specified by that header using web server internals including all optimizations like caching-headers.
As this header directive is non-standard different directives exists for different web servers applications:
- Apache: X-Sendfile
- Lighttpd v1.4: X-LIGHTTPD-send-file
- Lighttpd v1.5: X-Sendfile
- Nginx: X-Accel-Redirect
- Cherokee: X-Sendfile and X-Accel-Redirect
Note: This option allows to download files that are not under web folders, and even files that are otherwise protected (deny from all) like .htaccess
Side effects: If this option is disabled by the web server, when this method is called a download configuration dialog will open but the downloaded file will have 0 bytes.
Example:
<?php Yii::app()->request->xSendFile('/home/user/Pictures/picture1.jpg',array( 'saveName'=>'image1.jpg', 'mimeType'=>'image/jpeg', 'terminate'=>false, )); ?>