Added the first cdn
This commit is contained in:
parent
dd94bf8159
commit
4b9abfd36d
8
ContentDeliveryV1/.idea/.gitignore
generated
vendored
Normal file
8
ContentDeliveryV1/.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
8
ContentDeliveryV1/.idea/modules.xml
generated
Normal file
8
ContentDeliveryV1/.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/sheepstar-api.iml" filepath="$PROJECT_DIR$/.idea/sheepstar-api.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
4
ContentDeliveryV1/.idea/php.xml
generated
Normal file
4
ContentDeliveryV1/.idea/php.xml
generated
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="7.4" />
|
||||
</project>
|
8
ContentDeliveryV1/.idea/sheepstar-api.iml
generated
Normal file
8
ContentDeliveryV1/.idea/sheepstar-api.iml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
6
ContentDeliveryV1/.idea/vcs.xml
generated
Normal file
6
ContentDeliveryV1/.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
75
ContentDeliveryV1/root/index.php
Executable file
75
ContentDeliveryV1/root/index.php
Executable file
@ -0,0 +1,75 @@
|
||||
<?php
|
||||
function load($class) { include __DIR__."/../util/".$class.".php"; }
|
||||
function sendJSON($code, $message) {
|
||||
header("Content-Type: ".MimeTypes::getType("json"));
|
||||
echo json_encode(array("code" => $code, "message" => $message));
|
||||
exit(0);
|
||||
}
|
||||
spl_autoload_register('load');
|
||||
DB::init("localhost", "nutzername", "passwort", "datenbank");
|
||||
$media_dir = "/mnt/cdn/";
|
||||
|
||||
function checkAPIKey(): string {
|
||||
if (isset($_SERVER['HTTP_API_KEY'])) {
|
||||
if (DB::get()->query("SELECT null FROM api_keys WHERE apikey=?", $_SERVER['HTTP_API_KEY'])->numRows() != 1)
|
||||
sendJSON(502, "You need to provide an valid api key.");
|
||||
} else sendJSON(502, "You need to provide an valid api key.");
|
||||
return $_SERVER['HTTP_API_KEY'];
|
||||
}
|
||||
|
||||
Router::add("/upload", function () use ($media_dir) {
|
||||
$key = checkAPIKey();
|
||||
if(!empty($_FILES['asset'])) {
|
||||
$fileID = substr(number_format(time() * mt_rand(),0,'',''),0,16);
|
||||
$path = $media_dir.$fileID;
|
||||
$asset = $_FILES['asset'];
|
||||
$fileName = $asset['name'];
|
||||
|
||||
if(move_uploaded_file($_FILES['asset']['tmp_name'], $path)) {
|
||||
$split = explode(".", $fileName);
|
||||
$fileEnding = substr($split[count($split)-1], -5);
|
||||
|
||||
DB::get()->query("INSERT INTO media (assetID, assetEnding, assetOwner, assetName, assetDescription) VALUES (?, ?, ?, ?, ?)",
|
||||
$fileID, $fileEnding, $key, $fileName, "test");
|
||||
sendJSON(1, "https://cdn.sheepstar.xyz/".$fileID.".".$fileEnding);
|
||||
} else {
|
||||
sendJSON(500, "File upload failed");
|
||||
}
|
||||
}
|
||||
}, "post");
|
||||
|
||||
Router::add("/delete", function () use ($media_dir) {
|
||||
checkAPIKey();
|
||||
parse_str(file_get_contents("php://input"),$post_vars);
|
||||
if (isset($post_vars['assetID'])) {
|
||||
$assetID = $post_vars['assetID'];
|
||||
$query = DB::get()->query("SELECT null FROM media WHERE assetID=?", $assetID)->numRows();
|
||||
if ($query) {
|
||||
unlink($media_dir.$assetID);
|
||||
DB::get()->query("DELETE FROM media WHERE assetID=?", $assetID);
|
||||
sendJSON(1, "Resource deleted.");
|
||||
} else sendJSON(404, "Resource not found.");
|
||||
} else sendJSON(405, "Please provide an assetID.");
|
||||
}, "delete");
|
||||
|
||||
Router::add("^/[0-9]+\.[a-zA-Z1-9]+$", function () use ($media_dir) {
|
||||
|
||||
$parsed_url = parse_url($_SERVER['REQUEST_URI']);
|
||||
$url = str_replace("/", "", $parsed_url['path']);
|
||||
$split = explode(".", $url);
|
||||
$assetID = $split[0];
|
||||
$assetEnding = $split[count($split)-1];
|
||||
$query = DB::get()->query("SELECT null FROM media WHERE assetID=? AND assetEnding=?", $assetID, $assetEnding)->numRows();
|
||||
|
||||
if ($query == 1) {
|
||||
header("Content-Type: " . MimeTypes::getFromString($url));
|
||||
echo file_get_contents($media_dir.$assetID);
|
||||
} else sendJSON(404, "Resource not found.");
|
||||
|
||||
});
|
||||
|
||||
Router::add(".+", function () {
|
||||
sendJSON(402, "Please use the correct URL format");
|
||||
});
|
||||
|
||||
Router::run();
|
15
ContentDeliveryV1/util/DB.php
Normal file
15
ContentDeliveryV1/util/DB.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
class DB {
|
||||
|
||||
private static MySQL $database;
|
||||
|
||||
public static function get(): MySQL {
|
||||
return self::$database;
|
||||
}
|
||||
|
||||
public static function init($hostname = "localhost", $username = "root", $password, $database) {
|
||||
self::$database = new MySQL($hostname, $username, $password, $database);
|
||||
}
|
||||
|
||||
}
|
201
ContentDeliveryV1/util/MimeTypes.php
Normal file
201
ContentDeliveryV1/util/MimeTypes.php
Normal file
@ -0,0 +1,201 @@
|
||||
<?php
|
||||
|
||||
class MimeTypes {
|
||||
|
||||
private static string $plain = "text/plain";
|
||||
private static array $mimeTypes = array(
|
||||
'jar' => 'application/java-archive',
|
||||
'hqx' => 'application/mac-binhex40',
|
||||
'cpt' => 'application/mac-compactpro',
|
||||
'doc' => 'application/msword',
|
||||
'dat' => 'application/octet-stream',
|
||||
'oda' => 'application/oda',
|
||||
'ogg' => 'application/ogg',
|
||||
'pdf' => 'application/pdf',
|
||||
'ai' => 'application/postscript',
|
||||
'eps' => 'application/postscript',
|
||||
'ps' => 'application/postscript',
|
||||
'rdf' => 'application/rdf+xml',
|
||||
'rss' => 'application/rss+xml',
|
||||
'smi' => 'application/smil',
|
||||
'smil' => 'application/smil',
|
||||
'gram' => 'application/srgs',
|
||||
'grxml' => 'application/srgs+xml',
|
||||
'kml' => 'application/vnd.google-earth.kml+xml',
|
||||
'kmz' => 'application/vnd.google-earth.kmz',
|
||||
'mif' => 'application/vnd.mif',
|
||||
'xul' => 'application/vnd.mozilla.xul+xml',
|
||||
'xls' => 'application/vnd.ms-excel',
|
||||
'xlb' => 'application/vnd.ms-excel',
|
||||
'xlt' => 'application/vnd.ms-excel',
|
||||
'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
|
||||
'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
|
||||
'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
|
||||
'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
|
||||
'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
|
||||
'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
|
||||
'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
|
||||
'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
|
||||
'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
|
||||
'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
|
||||
'ppt' => 'application/vnd.ms-powerpoint',
|
||||
'pps' => 'application/vnd.ms-powerpoint',
|
||||
'odc' => 'application/vnd.oasis.opendocument.chart',
|
||||
'odb' => 'application/vnd.oasis.opendocument.database',
|
||||
'odf' => 'application/vnd.oasis.opendocument.formula',
|
||||
'odg' => 'application/vnd.oasis.opendocument.graphics',
|
||||
'otg' => 'application/vnd.oasis.opendocument.graphics-template',
|
||||
'odi' => 'application/vnd.oasis.opendocument.image',
|
||||
'odp' => 'application/vnd.oasis.opendocument.presentation',
|
||||
'otp' => 'application/vnd.oasis.opendocument.presentation-template',
|
||||
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
|
||||
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
|
||||
'odt' => 'application/vnd.oasis.opendocument.text',
|
||||
'odm' => 'application/vnd.oasis.opendocument.text-master',
|
||||
'ott' => 'application/vnd.oasis.opendocument.text-template',
|
||||
'oth' => 'application/vnd.oasis.opendocument.text-web',
|
||||
'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
|
||||
'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
|
||||
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
||||
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
|
||||
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
|
||||
'vsd' => 'application/vnd.visio',
|
||||
'wbxml' => 'application/vnd.wap.wbxml',
|
||||
'wmlc' => 'application/vnd.wap.wmlc',
|
||||
'wmlsc' => 'application/vnd.wap.wmlscriptc',
|
||||
'vxml' => 'application/voicexml+xml',
|
||||
'bcpio' => 'application/x-bcpio',
|
||||
'vcd' => 'application/x-cdlink',
|
||||
'pgn' => 'application/x-chess-pgn',
|
||||
'cpio' => 'application/x-cpio',
|
||||
'csh' => 'application/x-csh',
|
||||
'dcr' => 'application/x-director',
|
||||
'dir' => 'application/x-director',
|
||||
'dxr' => 'application/x-director',
|
||||
'dvi' => 'application/x-dvi',
|
||||
'spl' => 'application/x-futuresplash',
|
||||
'tgz' => 'application/x-gtar',
|
||||
'gtar' => 'application/x-gtar',
|
||||
'latex' => 'application/x-latex',
|
||||
'nc' => 'application/x-netcdf',
|
||||
'cdf' => 'application/x-netcdf',
|
||||
'sh' => 'application/x-sh',
|
||||
'shar' => 'application/x-shar',
|
||||
'swf' => 'application/x-shockwave-flash',
|
||||
'sit' => 'application/x-stuffit',
|
||||
'sv4cpio' => 'application/x-sv4cpio',
|
||||
'sv4crc' => 'application/x-sv4crc',
|
||||
'tar' => 'application/x-tar',
|
||||
'tcl' => 'application/x-tcl',
|
||||
'tex' => 'application/x-tex',
|
||||
'texinfo' => 'application/x-texinfo',
|
||||
'texi' => 'application/x-texinfo',
|
||||
't' => 'application/x-troff',
|
||||
'tr' => 'application/x-troff',
|
||||
'roff' => 'application/x-troff',
|
||||
'man' => 'application/x-troff-man',
|
||||
'me' => 'application/x-troff-me',
|
||||
'ms' => 'application/x-troff-ms',
|
||||
'ustar' => 'application/x-ustar',
|
||||
'src' => 'application/x-wais-source',
|
||||
'xml' => 'application/xml',
|
||||
'xsl' => 'application/xml',
|
||||
'dtd' => 'application/xml-dtd',
|
||||
'zip' => 'application/zip',
|
||||
'au' => 'audio/basic',
|
||||
'snd' => 'audio/basic',
|
||||
'mid' => 'audio/midi',
|
||||
'midi' => 'audio/midi',
|
||||
'kar' => 'audio/midi',
|
||||
'mpga' => 'audio/mpeg',
|
||||
'mp2' => 'audio/mpeg',
|
||||
'mp3' => 'audio/mpeg',
|
||||
'mp4' => 'video/mp4',
|
||||
'aif' => 'audio/x-aiff',
|
||||
'aiff' => 'audio/x-aiff',
|
||||
'aifc' => 'audio/x-aiff',
|
||||
'm3u' => 'audio/x-mpegurl',
|
||||
'wma' => 'audio/x-ms-wma',
|
||||
'wax' => 'audio/x-ms-wax',
|
||||
'ram' => 'audio/x-pn-realaudio',
|
||||
'ra' => 'audio/x-pn-realaudio',
|
||||
'rm' => 'application/vnd.rn-realmedia',
|
||||
'wav' => 'audio/x-wav',
|
||||
'pdb' => 'chemical/x-pdb',
|
||||
'xyz' => 'chemical/x-xyz',
|
||||
'bmp' => 'image/bmp',
|
||||
'cgm' => 'image/cgm',
|
||||
'gif' => 'image/gif',
|
||||
'ief' => 'image/ief',
|
||||
'jpeg' => 'image/jpeg',
|
||||
'jpg' => 'image/jpeg',
|
||||
'jpe' => 'image/jpeg',
|
||||
'png' => 'image/png',
|
||||
'svg' => 'image/svg+xml',
|
||||
'tiff' => 'image/tiff',
|
||||
'tif' => 'image/tiff',
|
||||
'djvu' => 'image/vnd.djvu',
|
||||
'djv' => 'image/vnd.djvu',
|
||||
'wbmp' => 'image/vnd.wap.wbmp',
|
||||
'ras' => 'image/x-cmu-raster',
|
||||
'ico' => 'image/x-icon',
|
||||
'pnm' => 'image/x-portable-anymap',
|
||||
'pbm' => 'image/x-portable-bitmap',
|
||||
'pgm' => 'image/x-portable-graymap',
|
||||
'ppm' => 'image/x-portable-pixmap',
|
||||
'rgb' => 'image/x-rgb',
|
||||
'xbm' => 'image/x-xbitmap',
|
||||
'psd' => 'image/x-photoshop',
|
||||
'xpm' => 'image/x-xpixmap',
|
||||
'xwd' => 'image/x-xwindowdump',
|
||||
'eml' => 'message/rfc822',
|
||||
'igs' => 'model/iges',
|
||||
'iges' => 'model/iges',
|
||||
'msh' => 'model/mesh',
|
||||
'mesh' => 'model/mesh',
|
||||
'silo' => 'model/mesh',
|
||||
'wrl' => 'model/vrml',
|
||||
'vrml' => 'model/vrml',
|
||||
'ics' => 'text/calendar',
|
||||
'ifb' => 'text/calendar',
|
||||
'csv' => 'text/csv',
|
||||
'rtx' => 'text/richtext',
|
||||
'rtf' => 'text/rtf',
|
||||
'sgml' => 'text/sgml',
|
||||
'sgm' => 'text/sgml',
|
||||
'tsv' => 'text/tab-separated-values',
|
||||
'wml' => 'text/vnd.wap.wml',
|
||||
'wmls' => 'text/vnd.wap.wmlscript',
|
||||
'etx' => 'text/x-setext',
|
||||
'mpeg' => 'video/mpeg',
|
||||
'mpg' => 'video/mpeg',
|
||||
'mpe' => 'video/mpeg',
|
||||
'qt' => 'video/quicktime',
|
||||
'mov' => 'video/quicktime',
|
||||
'mxu' => 'video/vnd.mpegurl',
|
||||
'm4u' => 'video/vnd.mpegurl',
|
||||
'flv' => 'video/x-flv',
|
||||
'json' => 'application/json',
|
||||
'py' => 'text/x-python',
|
||||
'avi' => 'video/x-msvideo',
|
||||
'ogv' => 'video/ogg',
|
||||
'movie' => 'video/x-sgi-movie',
|
||||
);
|
||||
|
||||
public static function getType(string $ending): string {
|
||||
if (isset(self::$mimeTypes[strtolower($ending)])) {
|
||||
return self::$mimeTypes[strtolower($ending)];
|
||||
} else return self::$plain;
|
||||
}
|
||||
|
||||
public static function getFromString(string $string): string {
|
||||
if ($string) {
|
||||
$splitted = explode(".", $string);
|
||||
return self::getType($splitted[sizeof($splitted)-1]);
|
||||
} else return self::$plain;
|
||||
}
|
||||
|
||||
|
||||
}
|
131
ContentDeliveryV1/util/MySQL.php
Normal file
131
ContentDeliveryV1/util/MySQL.php
Normal file
@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
class MySQL {
|
||||
|
||||
protected $connection;
|
||||
protected $query;
|
||||
protected $show_errors = TRUE;
|
||||
protected $query_closed = TRUE;
|
||||
public $query_count = 0;
|
||||
|
||||
public function __construct($dbhost, $dbuser, $dbpass = '', $dbname = '', $charset = 'utf8') {
|
||||
$this->connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
|
||||
if ($this->connection->connect_error) {
|
||||
$this->error('Failed to connect to MySQL - ' . $this->connection->connect_error);
|
||||
}
|
||||
$this->connection->set_charset($charset);
|
||||
}
|
||||
|
||||
public function query($query) {
|
||||
if (!$this->query_closed) {
|
||||
$this->query->close();
|
||||
}
|
||||
if ($this->query = $this->connection->prepare($query)) {
|
||||
if (func_num_args() > 1) {
|
||||
$x = func_get_args();
|
||||
$args = array_slice($x, 1);
|
||||
$types = '';
|
||||
$args_ref = array();
|
||||
foreach ($args as $k => &$arg) {
|
||||
if (is_array($args[$k])) {
|
||||
foreach ($args[$k] as $j => &$a) {
|
||||
$types .= $this->_gettype($args[$k][$j]);
|
||||
$args_ref[] = &$a;
|
||||
}
|
||||
} else {
|
||||
$types .= $this->_gettype($args[$k]);
|
||||
$args_ref[] = &$arg;
|
||||
}
|
||||
}
|
||||
array_unshift($args_ref, $types);
|
||||
call_user_func_array(array($this->query, 'bind_param'), $args_ref);
|
||||
}
|
||||
$this->query->execute();
|
||||
if ($this->query->errno) {
|
||||
$this->error('Unable to process MySQL query (check your params) - ' . $this->query->error);
|
||||
}
|
||||
$this->query_closed = FALSE;
|
||||
$this->query_count++;
|
||||
} else {
|
||||
$this->error('Unable to prepare MySQL statement (check your syntax) - ' . $this->connection->error);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
public function fetchAll($callback = null) {
|
||||
$params = array();
|
||||
$row = array();
|
||||
$meta = $this->query->result_metadata();
|
||||
while ($field = $meta->fetch_field()) {
|
||||
$params[] = &$row[$field->name];
|
||||
}
|
||||
call_user_func_array(array($this->query, 'bind_result'), $params);
|
||||
$result = array();
|
||||
while ($this->query->fetch()) {
|
||||
$r = array();
|
||||
foreach ($row as $key => $val) {
|
||||
$r[$key] = $val;
|
||||
}
|
||||
if ($callback != null && is_callable($callback)) {
|
||||
$value = call_user_func($callback, $r);
|
||||
if ($value == 'break') break;
|
||||
} else {
|
||||
$result[] = $r;
|
||||
}
|
||||
}
|
||||
$this->query->close();
|
||||
$this->query_closed = TRUE;
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function fetchArray() {
|
||||
$params = array();
|
||||
$row = array();
|
||||
$meta = $this->query->result_metadata();
|
||||
while ($field = $meta->fetch_field()) {
|
||||
$params[] = &$row[$field->name];
|
||||
}
|
||||
call_user_func_array(array($this->query, 'bind_result'), $params);
|
||||
$result = array();
|
||||
while ($this->query->fetch()) {
|
||||
foreach ($row as $key => $val) {
|
||||
$result[$key] = $val;
|
||||
}
|
||||
}
|
||||
$this->query->close();
|
||||
$this->query_closed = TRUE;
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function close() {
|
||||
return $this->connection->close();
|
||||
}
|
||||
|
||||
public function numRows() {
|
||||
$this->query->store_result();
|
||||
return $this->query->num_rows;
|
||||
}
|
||||
|
||||
public function affectedRows() {
|
||||
return $this->query->affected_rows;
|
||||
}
|
||||
|
||||
public function lastInsertID() {
|
||||
return $this->connection->insert_id;
|
||||
}
|
||||
|
||||
public function error($error) {
|
||||
if ($this->show_errors) {
|
||||
exit($error);
|
||||
}
|
||||
}
|
||||
|
||||
private function _gettype($var) {
|
||||
if (is_string($var)) return 's';
|
||||
if (is_float($var)) return 'd';
|
||||
if (is_int($var)) return 'i';
|
||||
return 'b';
|
||||
}
|
||||
|
||||
}
|
90
ContentDeliveryV1/util/Router.php
Normal file
90
ContentDeliveryV1/util/Router.php
Normal file
@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
class Router {
|
||||
|
||||
private static $routes = Array();
|
||||
private static $pathNotFound = null;
|
||||
private static $methodNotAllowed = null;
|
||||
|
||||
public static function add($expression, $function, $method = 'get'){
|
||||
array_push(self::$routes,Array(
|
||||
'expression' => $expression,
|
||||
'function' => $function,
|
||||
'method' => $method
|
||||
));
|
||||
}
|
||||
|
||||
public static function pathNotFound($function){
|
||||
self::$pathNotFound = $function;
|
||||
}
|
||||
|
||||
public static function methodNotAllowed($function){
|
||||
self::$methodNotAllowed = $function;
|
||||
}
|
||||
|
||||
public static function run($basepath = '/'){
|
||||
|
||||
$parsed_url = parse_url($_SERVER['REQUEST_URI']);
|
||||
|
||||
if(isset($parsed_url['path'])){
|
||||
$path = $parsed_url['path'];
|
||||
}else{
|
||||
$path = '/';
|
||||
}
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
|
||||
$path_match_found = false;
|
||||
|
||||
$route_match_found = false;
|
||||
|
||||
foreach(self::$routes as $route){
|
||||
|
||||
if($basepath!=''&&$basepath!='/'){
|
||||
$route['expression'] = '('.$basepath.')'.$route['expression'];
|
||||
}
|
||||
|
||||
$route['expression'] = '^'.$route['expression'];
|
||||
|
||||
$route['expression'] = $route['expression'].'$';
|
||||
|
||||
if(preg_match('#'.$route['expression'].'#',$path,$matches)){
|
||||
|
||||
$path_match_found = true;
|
||||
|
||||
if(strtolower($method) == strtolower($route['method'])){
|
||||
|
||||
array_shift($matches);
|
||||
|
||||
if($basepath!=''&&$basepath!='/'){
|
||||
array_shift($matches);
|
||||
}
|
||||
|
||||
call_user_func_array($route['function'], $matches);
|
||||
|
||||
$route_match_found = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$route_match_found){
|
||||
|
||||
if($path_match_found){
|
||||
header("HTTP/1.0 405 Method Not Allowed");
|
||||
if(self::$methodNotAllowed){
|
||||
call_user_func_array(self::$methodNotAllowed, Array($path,$method));
|
||||
}
|
||||
}else{
|
||||
header("HTTP/1.0 404 Not Found");
|
||||
if(self::$pathNotFound){
|
||||
call_user_func_array(self::$pathNotFound, Array($path));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user