summaryrefslogtreecommitdiff
path: root/includes/WebRequest.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/WebRequest.php')
-rw-r--r--includes/WebRequest.php66
1 files changed, 51 insertions, 15 deletions
diff --git a/includes/WebRequest.php b/includes/WebRequest.php
index b187c4ac..054eceb9 100644
--- a/includes/WebRequest.php
+++ b/includes/WebRequest.php
@@ -51,15 +51,20 @@ class WebRequest {
private $ip;
/**
+ * The timestamp of the start of the request, with microsecond precision.
+ * @var float
+ */
+ protected $requestTime;
+
+ /**
* Cached URL protocol
* @var string
*/
protected $protocol;
public function __construct() {
- if ( function_exists( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc() ) {
- throw new MWException( "MediaWiki does not function when magic quotes are enabled." );
- }
+ $this->requestTime = isset( $_SERVER['REQUEST_TIME_FLOAT'] )
+ ? $_SERVER['REQUEST_TIME_FLOAT'] : microtime( true );
// POST overrides GET data
// We don't use $_REQUEST here to avoid interference from cookies...
@@ -138,7 +143,7 @@ class WebRequest {
);
}
- wfRunHooks( 'WebRequestPathInfoRouter', array( $router ) );
+ Hooks::run( 'WebRequestPathInfoRouter', array( $router ) );
$matches = $router->parse( $path );
}
@@ -207,9 +212,9 @@ class WebRequest {
* @return array
*/
public static function detectProtocol() {
- if ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ||
+ if ( ( !empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ) ||
( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&
- $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) ) {
+ $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) ) {
return 'https';
} else {
return 'http';
@@ -217,6 +222,17 @@ class WebRequest {
}
/**
+ * Get the number of seconds to have elapsed since request start,
+ * in fractional seconds, with microsecond resolution.
+ *
+ * @return float
+ * @since 1.25
+ */
+ public function getElapsedTime() {
+ return microtime( true ) - $this->requestTime;
+ }
+
+ /**
* Get the current URL protocol (http or https)
* @return string
*/
@@ -289,7 +305,7 @@ class WebRequest {
}
} else {
global $wgContLang;
- $data = isset( $wgContLang ) ? $wgContLang->normalize( $data ) : UtfNormal::cleanUp( $data );
+ $data = isset( $wgContLang ) ? $wgContLang->normalize( $data ) : UtfNormal\Validator::cleanUp( $data );
}
return $data;
}
@@ -705,21 +721,22 @@ class WebRequest {
/**
* Take an arbitrary query and rewrite the present URL to include it
+ * @deprecated Use appendQueryValue/appendQueryArray instead
* @param string $query Query string fragment; do not include initial '?'
- *
* @return string
*/
public function appendQuery( $query ) {
+ wfDeprecated( __METHOD__, '1.25' );
return $this->appendQueryArray( wfCgiToArray( $query ) );
}
/**
* @param string $key
* @param string $value
- * @param bool $onlyquery
+ * @param bool $onlyquery [deprecated]
* @return string
*/
- public function appendQueryValue( $key, $value, $onlyquery = false ) {
+ public function appendQueryValue( $key, $value, $onlyquery = true ) {
return $this->appendQueryArray( array( $key => $value ), $onlyquery );
}
@@ -727,16 +744,21 @@ class WebRequest {
* Appends or replaces value of query variables.
*
* @param array $array Array of values to replace/add to query
- * @param bool $onlyquery Whether to only return the query string and not the complete URL
+ * @param bool $onlyquery Whether to only return the query string and not the complete URL [deprecated]
* @return string
*/
- public function appendQueryArray( $array, $onlyquery = false ) {
+ public function appendQueryArray( $array, $onlyquery = true ) {
global $wgTitle;
$newquery = $this->getQueryValues();
unset( $newquery['title'] );
$newquery = array_merge( $newquery, $array );
$query = wfArrayToCgi( $newquery );
- return $onlyquery ? $query : $wgTitle->getLocalURL( $query );
+ if ( !$onlyquery ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ return $wgTitle->getLocalURL( $query );
+ }
+
+ return $query;
}
/**
@@ -1112,7 +1134,7 @@ HTML;
}
# Allow extensions to improve our guess
- wfRunHooks( 'GetIP', array( &$ip ) );
+ Hooks::run( 'GetIP', array( &$ip ) );
if ( !$ip ) {
throw new MWException( "Unable to determine IP." );
@@ -1255,6 +1277,7 @@ class WebRequestUpload {
class FauxRequest extends WebRequest {
private $wasPosted = false;
private $session = array();
+ private $requestUrl;
/**
* @param array $data Array of *non*-urlencoded key => value pairs, the
@@ -1267,6 +1290,8 @@ class FauxRequest extends WebRequest {
public function __construct( $data = array(), $wasPosted = false,
$session = null, $protocol = 'http'
) {
+ $this->requestTime = microtime( true );
+
if ( is_array( $data ) ) {
$this->data = $data;
} else {
@@ -1334,8 +1359,15 @@ class FauxRequest extends WebRequest {
return false;
}
+ public function setRequestURL( $url ) {
+ $this->requestUrl = $url;
+ }
+
public function getRequestURL() {
- $this->notImplemented( __METHOD__ );
+ if ( $this->requestUrl === null ) {
+ throw new MWException( 'Request URL not set' );
+ }
+ return $this->requestUrl;
}
public function getProtocol() {
@@ -1483,4 +1515,8 @@ class DerivativeRequest extends FauxRequest {
public function getProtocol() {
return $this->base->getProtocol();
}
+
+ public function getElapsedTime() {
+ return $this->base->getElapsedTime();
+ }
}