source: display.php @ 576525

Revision 576525, 3.5 KB checked in by pierre-alain <pierre-alain@…>, 2 years ago (diff)

sending correct etag

  • Property mode set to 100644
Line 
1<?php
2
3namespace OWR;
4
5if(empty($_GET['f']))
6    die;
7
8define('PATH', __DIR__.DIRECTORY_SEPARATOR); // define root path
9define('HOME_PATH', PATH.'OWR'.DIRECTORY_SEPARATOR); // define home path
10
11require HOME_PATH . 'cfg.php';
12
13Controller::iGet();
14
15$filename = $_GET['f'];
16
17$theme = Theme::iGet();
18
19$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
20switch($ext)
21{
22    case 'jpg':
23    case 'jpeg':
24        $mime = 'image/jpeg';
25        $type = 'images';
26        break;
27
28    case 'png':
29    case 'gif':
30        $mime = 'image/'.$ext;
31        $type = 'images';
32        break;
33    case 'css':
34        $mime = 'text/css; charset=utf-8';
35        $minify = isset($_GET['minify']);
36        $type = 'css';
37        break;
38    case 'js':
39        $mine = 'text/javascript; charset=utf-8';
40        $minify = isset($_GET['minify']);
41        $type = 'js';
42        break;
43    default: die;
44}
45
46if(false !== strpos($filename, '/'))
47{ // plugin call
48    $file = realpath(OWR_PLUGINS_PATH . $filename);
49    if(false === $file || 0 !== strpos($file, OWR_PLUGINS_PATH)) die;
50}
51else
52{
53    do
54    {
55        $file = $theme->getPath() . $type . DIRECTORY_SEPARATOR . $filename;
56        if(file_exists($file))
57            break;
58    }
59    while($theme = $theme->getParentTheme());
60
61    if(empty($theme))
62        die;
63}
64
65$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
66switch($ext)
67{
68    case 'jpg':
69    case 'jpeg':
70        $mime = 'image/jpeg';
71        break;
72
73    case 'png':
74    case 'gif':
75        $mime = 'image/'.$ext;
76        break;
77    case 'css':
78        $mime = 'text/css; charset=utf-8';
79        $minify = isset($_GET['minify']);
80        break;
81    case 'js':
82        $mime = 'text/javascript; charset=utf-8';
83        $minify = isset($_GET['minify']);
84        break;
85    default: die;
86}
87
88header('Content-type: ' . $mime);
89header('Cache-Control: Public, must-revalidate');
90header("Expires: ".@gmdate("D, d M Y H:i:s", time() + 60*60*24*365)." GMT");
91header("Last-Modified: ".@gmdate("D, d M Y H:i:s", filemtime($file))." GMT"); 
92$etag = '"' . $ext . (!empty($minify) ? '-minify' : '') . '-'.md5_file($file).'"';
93header('Etag: '.$etag);
94if(isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] === $etag)
95{
96    header("HTTP/1.1 304 Not Modified");
97    exit;
98}
99unset($etag,$lastMtime);
100// try to gzip the page
101$encoding = false;
102if(extension_loaded('zlib') && !ini_get('zlib.output_compression'))
103{
104    if(function_exists('ob_gzhandler') && @ob_start('ob_gzhandler'))
105        $encoding = 'gzhandler';
106    elseif(!headers_sent() && isset($_SERVER['HTTP_ACCEPT_ENCODING']))
107    {
108        if(strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) 
109        {
110            $encoding = 'x-gzip';
111        } 
112        elseif(strpos($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip') !== false) 
113        {
114            $encoding = 'gzip';
115        }
116    }
117}
118switch($encoding)
119{
120    case 'gzhandler':
121        @ob_implicit_flush(0);
122        break;
123    case 'gzip':
124    case 'x-gzip':
125        header('Content-Encoding: ' . $encoding);
126        ob_start();
127    default:
128        break;
129}
130
131if(!empty($minify))
132    echo $theme->minify($file);
133else
134    readfile($file);
135
136switch($encoding)
137{
138    case 'gzhandler':
139        @ob_end_flush();
140        break;
141    case 'gzip':
142    case 'x-gzip':
143        $contents = ob_get_clean();
144        $size = strlen($contents);
145        $contents = gzcompress($contents, 6);
146        $contents = substr($contents, 0, $size);
147        echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
148        echo $contents;
149        flush();
150    default:
151        flush();
152        break;
153}
154exit;
Note: See TracBrowser for help on using the repository browser.