mirror of
https://github.com/UnickSoft/graphonline.git
synced 2025-07-01 15:26:12 +00:00
Add html cache for ru wiki
This commit is contained in:
parent
f7ba773a50
commit
986d175fbe
@ -1,15 +1,62 @@
|
|||||||
# Use mod_rewrite to enable "Clean URLs" for a PmWiki installation.
|
|
||||||
RewriteEngine On
|
RewriteEngine On
|
||||||
# Define the rewrite base.
|
# Define the rewrite base. This is the URL of the directory that the
|
||||||
|
# .htaccess file (if using) resides in
|
||||||
RewriteBase /wiki
|
RewriteBase /wiki
|
||||||
|
# Catch requests for index.anything
|
||||||
|
#RewriteRule ^index / [R=301]
|
||||||
|
# Send requests without parameters to pmwiki.php.
|
||||||
|
RewriteRule ^$ pmwiki.php [L]
|
||||||
|
# Send requests for index.php to pmwiki.php.
|
||||||
|
RewriteRule ^index\.php$ pmwiki.php [L]
|
||||||
|
|
||||||
|
# Non-capital first letter means that it's not a wiki page
|
||||||
|
RewriteRule ^[a-z].*$ - [L]
|
||||||
|
|
||||||
# Auto redirect to https.
|
# Auto redirect to https.
|
||||||
RewriteCond %{HTTPS} off
|
RewriteCond %{HTTPS} off
|
||||||
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
|
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
|
||||||
|
|
||||||
# Send requests without parameters to pmwiki.php.
|
|
||||||
RewriteRule ^$ pmwiki.php [L]
|
## Define the rules that exclude things from the cache:
|
||||||
# Send requests for index.php to pmwiki.php.
|
# If any of these conditions are true ...
|
||||||
RewriteRule ^index\.php$ pmwiki.php [L]
|
|
||||||
# Send requests to pmwiki.php, appending the query string part.
|
# Posting a form request
|
||||||
RewriteRule ^([A-Z0-9\xa0-\xff].*)$ pmwiki.php?n=$1 [QSA,L]
|
RewriteCond %{REQUEST_METHOD} POST [OR]
|
||||||
|
# A session exists -> the user is signed in
|
||||||
|
RewriteCond %{HTTP_COOKIE} PHPSESSID [OR]
|
||||||
|
# A query string exists; ie. we're not just viewing a page
|
||||||
|
RewriteCond %{QUERY_STRING} .
|
||||||
|
|
||||||
|
# ... serve the file using pmwiki.php
|
||||||
|
RewriteRule ^(.*)$ pmwiki.php?n=$1 [QSA,L]
|
||||||
|
|
||||||
|
|
||||||
|
## If we're this far in the script it's ok to serve files from the cache
|
||||||
|
|
||||||
|
# Root means that we want the wiki homepage
|
||||||
|
RewriteCond %{REQUEST_URI} ^/$
|
||||||
|
# Does the file exist?
|
||||||
|
# Change 'Main.HomePage' here if you're using a different page
|
||||||
|
RewriteCond /wiki/htmlcache/Main.HomePage.html -f
|
||||||
|
# If so, serve it.
|
||||||
|
# Change 'Main.HomePage' here if you're using a different page
|
||||||
|
RewriteRule ^$ htmlcache/Main.HomePage.html [L]
|
||||||
|
|
||||||
|
# No . or / in the URL means that we want the group main page
|
||||||
|
RewriteCond %{REQUEST_URI} ^/([^./?]+)[./]?$
|
||||||
|
# Does the file exist?
|
||||||
|
# Change '%1.%1' here if you're using a different group main page format
|
||||||
|
RewriteCond /wiki/htmlcache/%1.%1.html -f
|
||||||
|
# If so, serve it.
|
||||||
|
RewriteRule ^. htmlcache/%1.%1.html [L]
|
||||||
|
|
||||||
|
# We want Group.Page
|
||||||
|
RewriteCond %{REQUEST_URI} ^/([^./]+)[./]([^./]+)/?$
|
||||||
|
# Does the file exist?
|
||||||
|
RewriteCond /wiki/htmlcache/%1.%2.html -f
|
||||||
|
# If so, serve it.
|
||||||
|
RewriteRule ^. htmlcache/%1.%2.html [L]
|
||||||
|
|
||||||
|
|
||||||
|
# Cache misses and anything that doesn't fit the above goes to pmwiki.php
|
||||||
|
RewriteRule ^(.*)$ pmwiki.php?n=$1 [QSA,L]
|
159
wiki/cookbook/fastcache.php
Normal file
159
wiki/cookbook/fastcache.php
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<?php if (!defined('PmWiki')) exit();
|
||||||
|
|
||||||
|
/* === FastCache ===
|
||||||
|
* Copyright 2007-09 Eemeli Aro <eemeli@gmail.com>
|
||||||
|
*
|
||||||
|
* Caches complete wiki pages for very fast retrieval.
|
||||||
|
*
|
||||||
|
* Developed and tested using the PmWiki 2.2.0 series.
|
||||||
|
*
|
||||||
|
* To install, add the following line to your local/config.php file :
|
||||||
|
include_once("$FarmD/cookbook/fastcache.php");
|
||||||
|
*
|
||||||
|
* For more information, please see the online documentation at
|
||||||
|
* http://www.pmwiki.org/wiki/Cookbook/FastCache
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License, Version 2, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
* http://www.gnu.org/copyleft/gpl.html
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* Updated for PHP5.5-7.4 by Petko Yotov pmwiki.org/petko
|
||||||
|
*/
|
||||||
|
|
||||||
|
$RecipeInfo['FastCache']['Version'] = '2020-10-17';
|
||||||
|
|
||||||
|
Markup( 'nofastcache', 'directives', '/\\(:nofastcache:\\)/i', "NoFastCache" );
|
||||||
|
function NoFastCache(){
|
||||||
|
$GLOBALS['FastCacheValid'] = FALSE;
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
SDV( $FastCacheDir, "$FarmD/htmlcache" );
|
||||||
|
SDV( $FastCacheValid, (
|
||||||
|
empty($_POST) &&
|
||||||
|
( empty($_GET) || ( array_keys($_GET) == array('n') ) ) &&
|
||||||
|
( empty($_SESSION) || ( $_SESSION == array( 'authid' => '' ) ) ) &&
|
||||||
|
( empty( $_REQUEST[ ini_get('session.name') ] ) ) # suggested by MagicBeanDip
|
||||||
|
&& ( empty( $_COOKIE[ ini_get('session.name') ] ) ) # Petko: PHP5.3+ cookies are not in $_REQUEST
|
||||||
|
) );
|
||||||
|
|
||||||
|
if ( !IsEnabled( $EnableFastCache, TRUE ) || !$FastCacheDir ) return;
|
||||||
|
|
||||||
|
if ($FastCacheValid) $HandleActions['browse'] = 'HandleFastCacheBrowse';
|
||||||
|
$EditFunctions[] = 'FastCacheUpdate';
|
||||||
|
|
||||||
|
|
||||||
|
function FastCacheUpdate($pagename, &$page, &$new) {
|
||||||
|
global $IsPagePosted;
|
||||||
|
global $FastCacheDir, $FastCacheInvalidateAllOnUpdate;
|
||||||
|
if ( !$IsPagePosted || !$FastCacheDir ) return;
|
||||||
|
if ( IsEnabled( $FastCacheInvalidateAllOnUpdate, TRUE ) ) {
|
||||||
|
if ( is_dir($FastCacheDir) && ( $fd = opendir($FastCacheDir) ) ) {
|
||||||
|
while ( ( $fh = readdir($fd) ) !== FALSE ) {
|
||||||
|
if ( $fh[0] == '.' ) continue;
|
||||||
|
if ( !unlink("$FastCacheDir/$fh") ) {
|
||||||
|
StopWatch("FastCacheUpdate: error unlinking file $FastCacheDir/$fh > stopping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
StopWatch("FastCacheUpdate: error opening directory $FastCacheDir");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
SDV( $FastCacheSuffix, '.html' );
|
||||||
|
$fcfile = "$FastCacheDir/$pagename$FastCacheSuffix";
|
||||||
|
if ( is_file($fcfile) )
|
||||||
|
if ( !unlink($fcfile) )
|
||||||
|
StopWatch("FastCacheUpdate: error unlinking file $fcfile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## based on HandleBrowse in pmwiki.php
|
||||||
|
function HandleFastCacheBrowse($pagename, $auth = 'read') {
|
||||||
|
# handle display of a page
|
||||||
|
global $DefaultPageTextFmt, $PageNotFoundHeaderFmt, $HTTPHeaders,
|
||||||
|
$EnableHTMLCache, $NoHTMLCache, $PageCacheFile, $LastModTime, $IsHTMLCached,
|
||||||
|
$FmtV, $HandleBrowseFmt, $PageStartFmt, $PageEndFmt, $PageRedirectFmt;
|
||||||
|
## begin added
|
||||||
|
global $FastCachePage, $FastCacheDir, $FastCacheValid, $FastCacheSuffix;
|
||||||
|
if ( !$FastCacheValid || !$FastCacheDir ) { HandleBrowse($pagename, $auth); return; }
|
||||||
|
SDV( $FastCacheSuffix, '.html' );
|
||||||
|
$fcfile = "$FastCacheDir/$pagename$FastCacheSuffix";
|
||||||
|
if ( @filemtime($fcfile) > $LastModTime ) {
|
||||||
|
if ( $FastCachePage = file_get_contents($fcfile) ) {
|
||||||
|
StopWatch("HandleFastCacheBrowse: using FastCached copy of $pagename");
|
||||||
|
echo $FastCachePage;
|
||||||
|
} else {
|
||||||
|
$FastCacheValid = FALSE;
|
||||||
|
StopWatch("HandleFastCacheBrowse: read error on $fcfile");
|
||||||
|
HandleBrowse($pagename, $auth);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
## end added
|
||||||
|
$page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
|
||||||
|
if (!$page) Abort("?cannot read $pagename");
|
||||||
|
PCache($pagename,$page);
|
||||||
|
if (PageExists($pagename)) $text = @$page['text'];
|
||||||
|
else {
|
||||||
|
$FastCacheValid = FALSE; ## added
|
||||||
|
SDV($DefaultPageTextFmt,'(:include $[{$SiteGroup}.PageNotFound]:)');
|
||||||
|
$text = FmtPageName($DefaultPageTextFmt, $pagename);
|
||||||
|
SDV($PageNotFoundHeaderFmt, 'HTTP/1.1 404 Not Found');
|
||||||
|
SDV($HTTPHeaders['status'], $PageNotFoundHeaderFmt);
|
||||||
|
}
|
||||||
|
$opt = array();
|
||||||
|
SDV($PageRedirectFmt,"<p><i>($[redirected from] <a rel='nofollow'
|
||||||
|
href='{\$PageUrl}?action=edit'>{\$FullName}</a>)</i></p>\$HTMLVSpace\n");
|
||||||
|
if (@!$_GET['from']) { $opt['redirect'] = 1; $PageRedirectFmt = ''; }
|
||||||
|
else $PageRedirectFmt = FmtPageName($PageRedirectFmt, $_GET['from']);
|
||||||
|
if (@$EnableHTMLCache && !$NoHTMLCache && $PageCacheFile &&
|
||||||
|
@filemtime($PageCacheFile) > $LastModTime) {
|
||||||
|
list($ctext) = unserialize(file_get_contents($PageCacheFile));
|
||||||
|
$FmtV['$PageText'] = "<!--cached-->$ctext";
|
||||||
|
$IsHTMLCached = 1;
|
||||||
|
StopWatch("HandleFastCacheBrowse: using HTMLCached copy"); ## modified
|
||||||
|
} else {
|
||||||
|
$IsHTMLCached = 0;
|
||||||
|
$text = '(:groupheader:)'.@$text.'(:groupfooter:)';
|
||||||
|
$t1 = time();
|
||||||
|
$FmtV['$PageText'] = MarkupToHTML($pagename, $text, $opt);
|
||||||
|
if (@$EnableHTMLCache > 0 && !$NoHTMLCache && $PageCacheFile
|
||||||
|
&& (time() - $t1 + 1) >= $EnableHTMLCache) {
|
||||||
|
$fp = @fopen("$PageCacheFile,new", "x");
|
||||||
|
if ($fp) {
|
||||||
|
StopWatch("HandleFastCacheBrowse: HTMLCaching page"); ## modified
|
||||||
|
fwrite($fp, serialize(array($FmtV['$PageText']))); fclose($fp);
|
||||||
|
rename("$PageCacheFile,new", $PageCacheFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SDV($HandleBrowseFmt,array(&$PageStartFmt, &$PageRedirectFmt, '$PageText',
|
||||||
|
&$PageEndFmt));
|
||||||
|
## begin modified
|
||||||
|
if ($FastCacheValid) {
|
||||||
|
ob_start();
|
||||||
|
PrintFmt($pagename,$HandleBrowseFmt);
|
||||||
|
$FastCachePage = ob_get_contents();
|
||||||
|
ob_end_flush();
|
||||||
|
mkdirp(dirname($fcfile));
|
||||||
|
if ( $FastCacheValid && ( $fc = fopen( "$fcfile,new", 'x' ) ) ) {
|
||||||
|
StopWatch( "HandleFastCacheBrowse: FastCaching $pagename" );
|
||||||
|
fwrite( $fc, $FastCachePage );
|
||||||
|
fclose($fc);
|
||||||
|
rename( "$fcfile,new", $fcfile );
|
||||||
|
} else {
|
||||||
|
StopWatch( "HandleFastCacheBrowse: error writing cache to $fcfile,new" );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
PrintFmt($pagename,$HandleBrowseFmt);
|
||||||
|
}
|
||||||
|
## end modified
|
||||||
|
}
|
@ -4,6 +4,7 @@
|
|||||||
## Also, be sure to take a look at http://www.pmwiki.org/wiki/Cookbook
|
## Also, be sure to take a look at http://www.pmwiki.org/wiki/Cookbook
|
||||||
## for more details on the types of customizations that can be added
|
## for more details on the types of customizations that can be added
|
||||||
## to PmWiki.
|
## to PmWiki.
|
||||||
|
include_once("cookbook/fastcache.php");
|
||||||
|
|
||||||
## $WikiTitle is the name that appears in the browser's title bar.
|
## $WikiTitle is the name that appears in the browser's title bar.
|
||||||
$WikiTitle = 'Вики справка Graph Online';
|
$WikiTitle = 'Вики справка Graph Online';
|
||||||
|
1
wiki/pub/htmlcache/.gitignore
vendored
Normal file
1
wiki/pub/htmlcache/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.html
|
Loading…
x
Reference in New Issue
Block a user