}
}
+if ( !function_exists( 'array_intersect_key' ) ) {
+ /**
+ * Exists in 5.1.0+
+ * Define our own array_intersect_key function
+ */
+ function array_intersect_key( $isec, $keys ) {
+ $argc = func_num_args();
+
+ if ( $argc > 2 ) {
+ for ( $i = 1; $isec && $i < $argc; $i++ ) {
+ $arr = func_get_arg( $i );
+
+ foreach ( array_keys( $isec ) as $key ) {
+ if ( !isset( $arr[$key] ) )
+ unset( $isec[$key] );
+ }
+ }
+
+ return $isec;
+ } else {
+ $res = array();
+ foreach ( array_keys( $isec ) as $key ) {
+ if ( isset( $keys[$key] ) )
+ $res[$key] = $isec[$key];
+ }
+
+ return $res;
+ }
+ }
+}
+
// Support for Wietse Venema's taint feature
if ( !function_exists( 'istainted' ) ) {
function istainted( $var ) {
static $recursion = 0;
static $cache = array(); // Cache of unoutputted messages
+ $text = wfDebugTimer() . $text;
# Check for raw action using $_GET not $wgRequest, since the latter might not be initialised yet
if ( isset( $_GET['action'] ) && $_GET['action'] == 'raw' && !$wgDebugRawPage ) {
array_map( array( $wgOut, 'debug' ), $cache );
$cache = array();
}
- if ( '' != $wgDebugLogFile && !$wgProfileOnly ) {
+ if ( $wgDebugLogFile != '' && !$wgProfileOnly ) {
# Strip unprintables; they can switch terminal modes when binary data
# gets dumped, which is pretty annoying.
$text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $text );
}
}
+function wfDebugTimer() {
+ global $wgDebugTimestamps;
+ if ( !$wgDebugTimestamps ) return '';
+ static $start = null;
+
+ if ( $start === null ) {
+ $start = microtime( true );
+ $prefix = "\n$start";
+ } else {
+ $prefix = sprintf( "%6.4f", microtime( true ) - $start );
+ }
+
+ return $prefix . ' ';
+}
+
/**
* Send a line giving PHP memory usage.
* @param $exact Bool: print exact values instead of kilobytes (default: false)
$log = sprintf( "%s\t%04.3f\t%s\n",
gmdate( 'YmdHis' ), $elapsed,
urldecode( $wgRequest->getRequestURL() . $forward ) );
- if ( '' != $wgDebugLogFile && ( $wgRequest->getVal('action') != 'raw' || $wgDebugRawPage ) ) {
+ if ( $wgDebugLogFile != '' && ( $wgRequest->getVal('action') != 'raw' || $wgDebugRawPage ) ) {
wfErrorLog( $log . $prof, $wgDebugLogFile );
}
}
if ( !is_null( $wgReadOnly ) ) {
return (bool)$wgReadOnly;
}
- if ( '' == $wgReadOnlyFile ) {
+ if ( $wgReadOnlyFile == '' ) {
return false;
}
// Set $wgReadOnly for faster access next time
* @return bool Whereas client accept gzip compression
*/
function wfClientAcceptsGzip() {
- global $wgUseGzip;
- if( $wgUseGzip ) {
+ if( isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ) {
# FIXME: we may want to blacklist some broken browsers
$m = array();
if( preg_match(
* "days=7&limit=100". Options in the first array override options in the second.
* Options set to "" will not be output.
*/
-function wfArrayToCGI( $array1, $array2 = NULL )
+function wfArrayToCGI( $array1, $array2 = null )
{
if ( !is_null( $array2 ) ) {
$array1 = $array1 + $array2;
$cgi = '';
foreach ( $array1 as $key => $value ) {
- if ( '' !== $value ) {
- if ( '' != $cgi ) {
+ if ( $value !== '' ) {
+ if ( $cgi != '' ) {
$cgi .= '&';
}
if ( is_array( $value ) ) {
} elseif( array_key_exists( '*/*', $avail ) ) {
return '*/*';
} else {
- return NULL;
+ return null;
}
}
}
}
$bestq = 0;
- $besttype = NULL;
+ $besttype = null;
foreach( array_keys( $combine ) as $type ) {
if( $combine[$type] > $bestq ) {
}
/**
- * Tries to get the system directory for temporary files.
- * The TMPDIR, TMP, and TEMP environment variables are checked in sequence,
- * and if none are set /tmp is returned as the generic Unix default.
+ * Tries to get the system directory for temporary files. For PHP >= 5.2.1,
+ * we'll use sys_get_temp_dir(). The TMPDIR, TMP, and TEMP environment
+ * variables are then checked in sequence, and if none are set /tmp is
+ * returned as the generic Unix default.
*
* NOTE: When possible, use the tempfile() function to create temporary
* files to avoid race conditions on file creation, etc.
* @return String
*/
function wfTempDir() {
+ if( function_exists( 'sys_get_temp_dir' ) ) {
+ return sys_get_temp_dir();
+ }
foreach( array( 'TMPDIR', 'TMP', 'TEMP' ) as $var ) {
$tmp = getenv( $var );
if( $tmp && file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) {
*/
function wfUrlProtocols() {
global $wgUrlProtocols;
-
- // This function is called a lot, cache its return value
- // TODO: Cache this in memcached instead?
+
static $retval = null;
if ( !is_null( $retval ) )
return $retval;
} else {
$retval = $wgUrlProtocols;
}
-
return $retval;
}
* This is used as a prefix in memcached keys
*/
function wfWikiID() {
- global $wgDBprefix, $wgDBname, $wgWikiId;
- if( $wgWikiId )
- return $wgWikiId;
+ global $wgDBprefix, $wgDBname;
if ( $wgDBprefix ) {
return "$wgDBname-$wgDBprefix";
} else {
/**
* Find a file.
* Shortcut for RepoGroup::singleton()->findFile()
+ * @param $title Either a string or Title object
* @param $options Associative array of options:
* time: requested time for an archived image, or false for the
* current version. An image object will be returned which was
/**
* Get an object referring to a locally registered file.
* Returns a valid placeholder object if the file does not exist.
+ * @param $title Either a string or Title object
+ * @return File, or null if passed an invalid Title
*/
function wfLocalFile( $title ) {
return RepoGroup::singleton()->getLocalRepo()->newFile( $title );
}
}
-/**
- * Displays a avglag error
- *
- * @param $lag Integer: avglag (actual)
- * @param $avgLag Integer: avglag (requested)
- */
-function wfAvglagError( $lag, $avgLag ) {
- header( 'HTTP/1.1 503 Service Unavailable' );
- header( 'Retry-After: ' . max( intval( $avgLag ), 5 ) );
- header( 'X-Database-Lag: ' . intval( $lag ) );
- header( 'Content-Type: text/plain' );
-
- echo "Lagged: $lag seconds average\n";
-}
-
/**
* Throws a warning that $function is deprecated
* @param $function String
function wfWaitForSlaves( $maxLag, $wiki = false ) {
if( $maxLag ) {
$lb = wfGetLB( $wiki );
- list( $host, $lag ) = $lb->getMaxLag();
+ list( $host, $lag ) = $lb->getMaxLag( $wiki );
while( $lag > $maxLag ) {
$name = @gethostbyaddr( $host );
if( $name !== false ) {