* @since 1.27
*/
public static function getRequestId() {
+ // This method is called from various error handlers and should be kept simple.
+
if ( !self::$reqId ) {
self::$reqId = isset( $_SERVER['UNIQUE_ID'] )
? $_SERVER['UNIQUE_ID'] : wfRandomString( 24 );
* @return string
*/
public static function getGlobalRequestURL() {
+ // This method is called on fatal errors; it should not depend on anything complex.
+
if ( isset( $_SERVER['REQUEST_URI'] ) && strlen( $_SERVER['REQUEST_URI'] ) ) {
$base = $_SERVER['REQUEST_URI'];
} elseif ( isset( $_SERVER['HTTP_X_ORIGINAL_URL'] )
return false;
}
- $msg = "[{exception_id}] PHP Fatal Error: {$message}";
+ $url = WebRequest::getGlobalRequestURL();
+ $msgParts = [
+ '[{exception_id}] {exception_url} PHP Fatal Error',
+ ( $line || $file ) ? ' from' : '',
+ $line ? " line $line" : '',
+ ( $line && $file ) ? ' of' : '',
+ $file ? " $file" : '',
+ ": $message",
+ ];
+ $msg = implode( '', $msgParts );
// Look at message to see if this is a class not found failure
// HHVM: Class undefined: foo
// PHP5: Class 'foo' not found
- if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/", $msg ) ) {
+ if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/", $message ) ) {
// phpcs:disable Generic.Files.LineLength
$msg = <<<TXT
{$msg}
'code' => $level,
'file' => $file,
'line' => $line,
- 'trace' => static::redactTrace( $trace ),
+ 'trace' => self::prettyPrintTrace( self::redactTrace( $trace ) ),
],
- 'exception_id' => wfRandomString( 8 ),
+ 'exception_id' => WebRequest::getRequestId(),
+ 'exception_url' => $url,
'caught_by' => self::CAUGHT_BY_HANDLER
] );
$weight = 1.0;
if ( $this->warmCacheRatio > 0 ) {
- $res = $conn->query( 'SHOW STATUS', false );
+ $res = $conn->query( 'SHOW STATUS', __METHOD__ );
$s = $res ? $conn->fetchObject( $res ) : false;
if ( $s === false ) {
$host = $this->parent->getServerName( $index );
if ( $driver->supportsValidate() ) {
return $driver->validate( $text, $errorStr );
} else {
- throw new MWException( __METHOD__ . ": error text return from HHVM tidy is not supported" );
+ throw new MWException( __METHOD__ . ": tidy driver does not support validate()" );
}
}