! $bits = explode( '!', $fileName, 2 ); if( !isset($bits[1]) ) { wfThumbError( 404, wfMsg( 'badtitletext' ) ); return; } $title = Title::makeTitleSafe( NS_FILE, $bits[1] ); if( is_null($title) ) { wfThumbError( 404, wfMsg( 'badtitletext' ) ); return; } $img = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $title, $fileName ); } else { $img = wfLocalFile( $fileName ); } if ( !$img ) { wfThumbError( 404, wfMsg( 'badtitletext' ) ); return; } if ( !$img->exists() ) { wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' ); return; } $sourcePath = $img->getPath(); if ( $sourcePath === false ) { wfThumbError( 500, 'The source file is not locally accessible.' ); return; } // Check IMS against the source file // This means that clients can keep a cached copy even after it has been deleted on the server if ( !empty( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) { // Fix IE brokenness $imsString = preg_replace( '/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"] ); // Calculate time wfSuppressWarnings(); $imsUnix = strtotime( $imsString ); wfRestoreWarnings(); $stat = @stat( $sourcePath ); if ( $stat['mtime'] <= $imsUnix ) { header( 'HTTP/1.1 304 Not Modified' ); return; } } // Stream the file if it exists already try { if ( false != ( $thumbName = $img->thumbName( $params ) ) ) { $thumbPath = $img->getThumbPath( $thumbName ); if ( is_file( $thumbPath ) ) { wfStreamFile( $thumbPath ); return; } } } catch ( MWException $e ) { wfThumbError( 500, $e->getHTML() ); return; } try { $thumb = $img->transform( $params, File::RENDER_NOW ); } catch( Exception $ex ) { // Tried to select a page on a non-paged file? $thumb = false; } $errorMsg = false; if ( !$thumb ) { $errorMsg = wfMsgHtml( 'thumbnail_error', 'File::transform() returned false' ); } elseif ( $thumb->isError() ) { $errorMsg = $thumb->getHtmlMsg(); } elseif ( !$thumb->getPath() ) { $errorMsg = wfMsgHtml( 'thumbnail_error', 'No path supplied in thumbnail object' ); } elseif ( $thumb->getPath() == $img->getPath() ) { $errorMsg = wfMsgHtml( 'thumbnail_error', 'Image was not scaled, ' . 'is the requested width bigger than the source?' ); } else { wfStreamFile( $thumb->getPath() ); } if ( $errorMsg !== false ) { wfThumbError( 500, $errorMsg ); } wfProfileOut( __METHOD__ ); } function wfThumbError( $status, $msg ) { global $wgShowHostnames; header( 'Cache-Control: no-cache' ); header( 'Content-Type: text/html; charset=utf-8' ); if ( $status == 404 ) { header( 'HTTP/1.1 404 Not found' ); } else { header( 'HTTP/1.1 500 Internal server error' ); } if( $wgShowHostnames ) { $url = htmlspecialchars( @$_SERVER['REQUEST_URI'] ); $hostname = htmlspecialchars( wfHostname() ); $debug = "\n\n"; } else { $debug = ""; } echo <<Error generating thumbnail

Error generating thumbnail

$msg

$debug EOT; }