You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.6 KiB
PHP
117 lines
3.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Informatica Eindproject D4p
|
|
* 6in3, Stedelijk Gymnasium Nijmegen
|
|
* Docent: Hans de Wolf
|
|
*
|
|
* ==================
|
|
*
|
|
* Daniel Boutros,
|
|
* Christiaan Goossens,
|
|
* Jelmer Hinssen
|
|
*/
|
|
|
|
namespace Inforbank;
|
|
|
|
class Proxy
|
|
{
|
|
public static $route;
|
|
|
|
public function __invoke($request, $response, $next)
|
|
{
|
|
$uri = $request->getUri();
|
|
|
|
self::$route = $uri;
|
|
|
|
$path = $uri->getPath();
|
|
$pa = explode('assets/', $path, 2);
|
|
|
|
if (isset($pa[1])) {
|
|
$path = __DIR__ . '/../assets/'.$pa[1];
|
|
$path = realpath($path);
|
|
|
|
if ($path) {
|
|
$ext = pathinfo($path, PATHINFO_EXTENSION);
|
|
$ext2Mime = array(
|
|
|
|
'txt' => 'text/plain',
|
|
'htm' => 'text/html',
|
|
'html' => 'text/html',
|
|
'php' => 'text/html',
|
|
'css' => 'text/css',
|
|
'js' => 'application/javascript',
|
|
'json' => 'application/json',
|
|
'xml' => 'application/xml',
|
|
'swf' => 'application/x-shockwave-flash',
|
|
'flv' => 'video/x-flv',
|
|
|
|
// images
|
|
'png' => 'image/png',
|
|
'jpe' => 'image/jpeg',
|
|
'jpeg' => 'image/jpeg',
|
|
'jpg' => 'image/jpeg',
|
|
'gif' => 'image/gif',
|
|
'bmp' => 'image/bmp',
|
|
'ico' => 'image/vnd.microsoft.icon',
|
|
'tiff' => 'image/tiff',
|
|
'tif' => 'image/tiff',
|
|
'svg' => 'image/svg+xml',
|
|
'svgz' => 'image/svg+xml',
|
|
|
|
// archives
|
|
'zip' => 'application/zip',
|
|
'rar' => 'application/x-rar-compressed',
|
|
'exe' => 'application/x-msdownload',
|
|
'msi' => 'application/x-msdownload',
|
|
'cab' => 'application/vnd.ms-cab-compressed',
|
|
|
|
// audio/video
|
|
'mp3' => 'audio/mpeg',
|
|
'qt' => 'video/quicktime',
|
|
'mov' => 'video/quicktime',
|
|
|
|
// adobe
|
|
'pdf' => 'application/pdf',
|
|
'psd' => 'image/vnd.adobe.photoshop',
|
|
'ai' => 'application/postscript',
|
|
'eps' => 'application/postscript',
|
|
'ps' => 'application/postscript',
|
|
|
|
// ms office
|
|
'doc' => 'application/msword',
|
|
'rtf' => 'application/rtf',
|
|
'xls' => 'application/vnd.ms-excel',
|
|
'ppt' => 'application/vnd.ms-powerpoint',
|
|
|
|
// open office
|
|
'odt' => 'application/vnd.oasis.opendocument.text',
|
|
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
|
|
);
|
|
|
|
if (array_key_exists($ext, $ext2Mime)) {
|
|
$mime = $ext2Mime[$ext];
|
|
} else {
|
|
$finfo = finfo_open(FILEINFO_MIME_TYPE);
|
|
if (false !== ($_mime = finfo_file($finfo, $path))) {
|
|
$mime = $_mime;
|
|
}
|
|
finfo_close($finfo);
|
|
}
|
|
|
|
header('Content-Type: ' . $mime);
|
|
header('Content-Length: ' . filesize($path));
|
|
|
|
ob_clean();
|
|
flush();
|
|
readfile($path);
|
|
exit;
|
|
} else {
|
|
return $next($request, $response);
|
|
}
|
|
}
|
|
|
|
return $next($request, $response);
|
|
}
|
|
}
|