source: spip-zone/_plugins_/fastcache/fastcache.php @ 97235

Last change on this file since 97235 was 39923, checked in by fil@…, 11 years ago

fastcache a besoin de connaitre la configuration du plugin memoization

File size: 1.8 KB
Line 
1<?php
2
3#
4# un script pour servir quelques pages le plus vite possible
5#
6# implique que ces pages n'aient pas besoin d'executer du php a chaque hit
7#
8# (c) 2007-2009 fil@rezo.net
9#
10
11# debut du code
12define('_DIR_RESTREINT_ABS', 'ecrire/');
13
14if (empty($_POST)
15AND !isset($_COOKIE[_FC_COOKIE_PREFIX.'_admin'])
16AND !isset($_COOKIE[_FC_COOKIE_PREFIX.'_session'])
17AND !isset($_SERVER['PHP_AUTH_USER'])
18)
19        define('_FC_KEY', 'fastcache:'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
20
21function fc_testie() {
22        return
23                (
24                strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'msie')
25                AND preg_match('/MSIE /i', $_SERVER['HTTP_USER_AGENT'])
26                )
27                OR isset($_GET['fctestie']);
28}
29
30if (defined('_FC_KEY')) {
31        $GLOBALS['meta']['memoization'] = _FC_CFG_MEMOIZATION;
32        require_once _FC_MEMOIZATION;
33}
34
35if (defined('_FC_KEY')
36AND $p = cache_get(_FC_KEY)
37AND $p['time'] == @filemtime(_FC_META)
38AND strlen($p['gz'])
39) {
40        // choix du body
41        if (fc_testie()
42        AND $ie = cache_get('ie'._FC_KEY)
43        )
44                $p['gz'] = $ie;
45
46        // envoi des entetes
47        eval($p['head']);
48
49        // compression gzip
50        if (strstr(@$_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
51                header('Content-Encoding: gzip');
52                $body = &$p['gz'];
53        } else
54                $body = gzinflate(substr($p['gz'], 10));
55
56        // cache navigateur ?
57        $etag = '"'.md5($body).'"';
58        header('ETag: '.$etag);
59        if (@$_SERVER['HTTP_IF_NONE_MATCH'] == $etag
60        OR (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) AND strstr($p['head'], $_SERVER['HTTP_IF_MODIFIED_SINCE']))
61        ) {
62                header('HTTP/1.0 304 Not Modified');
63                exit;
64        }
65
66        // ultime entete : la longueur
67        header('Content-length: '.strlen($body));
68        header('Connection: close');
69        echo $body;
70
71        // faire les stats ?
72        if (_FC_STATS_SPIP) {
73                include_once _DIR_PLUGIN_FASTCACHE.'public/stats.php';
74                public_stats();
75        }
76}
77
78else {
79        include_once _DIR_RESTREINT_ABS.'inc_version.php';
80        include _DIR_RESTREINT_ABS.'public.php';
81}
82
83?>
Note: See TracBrowser for help on using the repository browser.