X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FHTMLFileCache.php;h=d205624e1aeb51966de4a21b544ab4b9016ccb41;hb=b36244532ec7e340dec933308c29621344ded1db;hp=7eca7989e954e7a65a861f90036e9772ea7e434e;hpb=0dd5d00e67ca11ca0112e2886b10f0621a3ab98f;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/HTMLFileCache.php b/includes/HTMLFileCache.php index 7eca7989e9..d205624e1a 100644 --- a/includes/HTMLFileCache.php +++ b/includes/HTMLFileCache.php @@ -14,6 +14,7 @@ * - $wgCachePages * - $wgCacheEpoch * - $wgUseFileCache + * - $wgCacheDirectory * - $wgFileCacheDirectory * - $wgUseGzip * @@ -24,14 +25,22 @@ class HTMLFileCache { public function __construct( &$title, $type = 'view' ) { $this->mTitle = $title; - $type = $type ? $type : 'view'; $this->mType = ($type == 'raw' || $type == 'view' ) ? $type : false; $this->fileCacheName(); // init name } public function fileCacheName() { if( !$this->mFileCache ) { - global $wgFileCacheDirectory, $wgRequest; + global $wgCacheDirectory, $wgFileCacheDirectory, $wgRequest; + + if ( $wgFileCacheDirectory ) { + $dir = $wgFileCacheDirectory; + } elseif ( $wgCacheDirectory ) { + $dir = "$wgCacheDirectory/html"; + } else { + throw new MWException( 'Please set $wgCacheDirectory in LocalSettings.php if you wish to use the HTML file cache' ); + } + # Store raw pages (like CSS hits) elsewhere $subdir = ($this->mType === 'raw') ? 'raw/' : ''; $key = $this->mTitle->getPrefixedDbkey(); @@ -129,12 +138,14 @@ class HTMLFileCache { public function loadFromFileCache() { global $wgOut, $wgMimeType, $wgOutputEncoding, $wgContLanguageCode; wfDebug(" loadFromFileCache()\n"); - $filename = $this->fileCacheName(); - $wgOut->sendCacheControl(); - - header( "Content-type: $wgMimeType; charset={$wgOutputEncoding}" ); - header( "Content-language: $wgContLanguageCode" ); + // Raw pages should handle cache control on their own, + // even when using file cache. This reduces hits from clients. + if( $this->mType !== 'raw' ) { + $wgOut->sendCacheControl(); + header( "Content-Type: $wgMimeType; charset={$wgOutputEncoding}" ); + header( "Content-Language: $wgContLanguageCode" ); + } if( $this->useGzip() ) { if( wfClientAcceptsGzip() ) { @@ -146,6 +157,7 @@ class HTMLFileCache { } } readfile( $filename ); + $wgOut->disable(); // tell $wgOut that output is taken care of } protected function checkCacheDirs() { @@ -157,13 +169,12 @@ class HTMLFileCache { wfMkdirParents( $mydir2 ); } - public function saveToFileCache( $origtext ) { + public function saveToFileCache( $text ) { global $wgUseFileCache; - if( !$wgUseFileCache ) { - return $origtext; // return to output + if( !$wgUseFileCache || strlen( $text ) < 512 ) { + // Disabled or empty/broken output (OOM and PHP errors) + return $text; } - $text = $origtext; - if( strcmp($text,'') == 0 ) return ''; wfDebug(" saveToFileCache()\n", false); @@ -201,7 +212,7 @@ class HTMLFileCache { public static function clearFileCache( $title ) { global $wgUseFileCache; if( !$wgUseFileCache ) return false; - $fc = new self( $title, '' ); + $fc = new self( $title, 'view' ); @unlink( $fc->fileCacheName() ); $fc = new self( $title, 'raw' ); @unlink( $fc->fileCacheName() );