Serve static files directly if not caught by web server
This commit is contained in:
parent
b2d3a11de8
commit
68733a2bc0
45
boot.php
45
boot.php
@ -896,6 +896,51 @@ class App {
|
|||||||
if(x($_GET,'q'))
|
if(x($_GET,'q'))
|
||||||
self::$cmd = escape_tags(trim($_GET['q'],'/\\'));
|
self::$cmd = escape_tags(trim($_GET['q'],'/\\'));
|
||||||
|
|
||||||
|
// Serve raw files from the file system in certain cases.
|
||||||
|
$filext = pathinfo(self::$cmd, PATHINFO_EXTENSION);
|
||||||
|
|
||||||
|
$serve_rawfiles=[
|
||||||
|
'jpg'=>'image/jpeg',
|
||||||
|
'jpeg'=>'image/jpeg',
|
||||||
|
'gif'=>'image/gif',
|
||||||
|
'png'=>'image/png',
|
||||||
|
'ico'=>'image/vnd.microsoft.icon',
|
||||||
|
'css'=>'text/css',
|
||||||
|
'js'=>'text/javascript',
|
||||||
|
'htm'=>'text/html',
|
||||||
|
'html'=>'text/html',
|
||||||
|
'map'=>'application/octet-stream',
|
||||||
|
'ttf'=>'font/ttf',
|
||||||
|
'woff'=>'font/woff',
|
||||||
|
'woff2'=>'font/woff2',
|
||||||
|
'svg'=>'image/svg+xml'];
|
||||||
|
|
||||||
|
if (array_key_exists($filext, $serve_rawfiles) && file_exists(self::$cmd)) {
|
||||||
|
$staticfilecwd = getcwd();
|
||||||
|
$staticfilerealpath = realpath(self::$cmd);
|
||||||
|
if(strpos($staticfilerealpath,$staticfilecwd) !== 0) {
|
||||||
|
header("HTTP/1.1 404 Not Found", true, 404);
|
||||||
|
killme();
|
||||||
|
}
|
||||||
|
|
||||||
|
$staticfileetag = '"'.md5($staticfilerealpath.filemtime(self::$cmd)).'"';
|
||||||
|
header("ETag: ".$staticfileetag);
|
||||||
|
header("Cache-control: max-age=2592000");
|
||||||
|
if(isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
|
||||||
|
// If HTTP_IF_NONE_MATCH is same as the generated ETag => content is the same as browser cache
|
||||||
|
// So send a 304 Not Modified response header and exit
|
||||||
|
if($_SERVER['HTTP_IF_NONE_MATCH'] == $staticfileetag) {
|
||||||
|
header('HTTP/1.1 304 Not Modified', true, 304);
|
||||||
|
killme();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
header("Content-type: ".$serve_rawfiles[$filext]);
|
||||||
|
$handle = fopen(self::$cmd, "rb");
|
||||||
|
fpassthru($handle);
|
||||||
|
fclose($handle);
|
||||||
|
killme();
|
||||||
|
}
|
||||||
|
|
||||||
// unix style "homedir"
|
// unix style "homedir"
|
||||||
|
|
||||||
if((substr(self::$cmd, 0, 1) === '~') || (substr(self::$cmd, 0, 1) === '@'))
|
if((substr(self::$cmd, 0, 1) === '~') || (substr(self::$cmd, 0, 1) === '@'))
|
||||||
|
Reference in New Issue
Block a user