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
|
<?php
// class Resources (issue #157)
// outputs secondary files, such as css and javascript
// data is stored gzipped (gzencode) and encoded (base64_encode)
//
class Resources {
// set this to the file containing getInternalResource;
// currently unused in split mode; set to __FILE__ for built PLA.
public static $embedding_file = __FILE__;
private static $_resources = array(
'css' => array(
'mime' => 'text/css',
'data' => 'resources/phpliteadmin.css',
),
'javascript' => array(
'mime' => 'text/javascript',
'data' => 'resources/phpliteadmin.js',
),
'favicon' => array(
'mime' => 'image/x-icon',
'data' => 'resources/favicon.ico',
'base64' => 'true',
),
);
// outputs the specified resource, if defined in this class.
// the main script should do no further output after calling this function.
public static function output($resource)
{
if (isset(self::$_resources[$resource])) {
$res =& self::$_resources[$resource];
if (function_exists('getInternalResource') && $data = getInternalResource($res['data'])) {
$filename = self::$embedding_file;
} else {
$filename = $res['data'];
}
// use last-modified time as etag; etag must be quoted
$etag = '"' . filemtime($filename) . '"';
// check headers for matching etag; if etag hasn't changed, use the cached version
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) {
header('HTTP/1.0 304 Not Modified');
return;
}
header('Etag: ' . $etag);
// cache file for at most 30 days
header('Cache-control: max-age=2592000');
// output resource
header('Content-type: ' . $res['mime']);
if (isset($data)) {
if (isset($res['base64'])) {
echo base64_decode($data);
} else {
echo $data;
}
} else {
readfile($filename);
}
}
}
}
|