forked from Retina-Images/Retina-Images
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathretinaimages.php
117 lines (99 loc) · 4.61 KB
/
retinaimages.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
/* Version: 1.3.1 - now with better cache */
define('DEBUG', false); // Write debugging information to a log file
define('SEND_ETAG', true); // You will want to disable this if you load balance multiple servers
define('SEND_EXPIRES', true); //
define('SEND_CACHE_CONTROL', true); //
define('CACHE_TIME', 24*60*60); // default: 1 day
$document_root = $_SERVER['DOCUMENT_ROOT'];
$requested_uri = parse_url(urldecode($_SERVER['REQUEST_URI']), PHP_URL_PATH);
$requested_file = basename($requested_uri);
$source_file = $document_root.$requested_uri;
$source_ext = strtolower(pathinfo($source_file, PATHINFO_EXTENSION));
$cache_directive = 'must-revalidate';
if (DEBUG) {
$_debug_fh = fopen('retinaimages.log', 'a');
fwrite($_debug_fh, "* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
fwrite($_debug_fh, print_r($_COOKIE, true)."\n\n");
fwrite($_debug_fh, "document_root: {$document_root}\n");
fwrite($_debug_fh, "requested_uri: {$requested_uri}\n");
fwrite($_debug_fh, "requested_file: {$requested_file}\n");
fwrite($_debug_fh, "source_file: {$source_file}\n");
fwrite($_debug_fh, "source_ext: {$source_ext}\n");
}
// Image was requested
if (in_array($source_ext, array('png', 'gif', 'jpg', 'jpeg', 'bmp'))) {
// Check if a cookie is set
$cookie_value = false;
if (isset($_COOKIE['devicePixelRatio'])) {
$cookie_value = intval($_COOKIE['devicePixelRatio']);
// Force revalidation of cache on next request
$cache_directive = 'no-cache';
}
// Check if DPR is high enough to warrant retina image
if (DEBUG) { fwrite($_debug_fh, "devicePixelRatio: {$cookie_value}\n"); }
if ($cookie_value !== false && $cookie_value > 1) {
// Check if retina image exists
$retina_file = pathinfo($source_file, PATHINFO_DIRNAME).'/'.pathinfo($source_file, PATHINFO_FILENAME).'@2x.'.pathinfo($source_file, PATHINFO_EXTENSION);
if (DEBUG) { fwrite($_debug_fh, "retina_file: {$retina_file}\n"); }
if (file_exists($retina_file)) {
$source_file = $retina_file;
}
}
// Send cache headers
if (SEND_CACHE_CONTROL) {
header("Cache-Control: private, {$cache_directive}, max-age=".CACHE_TIME, true);
}
if (SEND_EXPIRES) {
date_default_timezone_set('GMT');
header('Expires: '.gmdate('D, d M Y H:i:s', time()+CACHE_TIME).' GMT', true);
}
if (SEND_ETAG) {
$etag = '"'.filemtime($source_file).fileinode($source_file).'"';
header("ETag: $etag", true);
if (DEBUG) {
fwrite($_debug_fh, "generated etag: {$etag}\n");
if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
fwrite($_debug_fh, "received etag: {$_SERVER['HTTP_IF_NONE_MATCH']}\n\n");
}
}
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && ($_SERVER['HTTP_IF_NONE_MATCH']) === $etag) {
// File in cache hasn't change
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($source_file)).' GMT', true, 304);
exit();
}
}
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) === filemtime($source_file))) {
// File in cache hasn't change
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($source_file)).' GMT', true, 304);
exit();
}
// Send image headers
if (in_array($source_ext, array('png', 'gif', 'jpeg', 'bmp'))) {
header("Content-Type: image/".$source_ext, true);
}
else {
header("Content-Type: image/jpeg", true);
}
header('Content-Length: '.filesize($source_file), true);
// Close debug session if open
if (DEBUG) {
fwrite($_debug_fh, "sending file: {$source_file}\n\n");
fclose($_debug_fh);
}
// Send file
readfile($source_file);
exit();
}
// DPR value was sent
elseif(isset($_GET['devicePixelRatio'])) {
$dpr = $_GET['devicePixelRatio'];
// Validate value before setting cookie
if (''.intval($dpr) !== $dpr) {
$dpr = '1';
}
setcookie('devicePixelRatio', $dpr);
exit();
}
// Respond with an empty content
header('HTTP/1.1 204 No Content', true);