Skip to content

Commit

Permalink
autoload added, URL class added, UUID class added
Browse files Browse the repository at this point in the history
  • Loading branch information
Matix-Media committed Jul 28, 2020
1 parent 25ec73d commit ce256ec
Show file tree
Hide file tree
Showing 4 changed files with 190 additions and 4 deletions.
5 changes: 1 addition & 4 deletions public/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@

// Required includes
include("../vendor/autoload.php");
include("../requires/Log.php");
include("../requires/Utils.php");
include("../requires/Route.php");
include("../requires/Database.php");
include("../requires/autoload.php");


// Setup
Expand Down
119 changes: 119 additions & 0 deletions requires/UUID.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
<?php
class UUID
{
public static function v3($namespace, $name)
{
if (!self::is_valid($namespace)) return false;

// Get hexadecimal components of namespace
$nhex = str_replace(array('-', '{', '}'), '', $namespace);

// Binary Value
$nstr = '';

// Convert Namespace UUID to bits
for ($i = 0; $i < strlen($nhex); $i += 2) {
$nstr .= chr(hexdec($nhex[$i] . $nhex[$i + 1]));
}

// Calculate hash value
$hash = md5($nstr . $name);

return sprintf(
'%08s-%04s-%04x-%04x-%12s',

// 32 bits for "time_low"
substr($hash, 0, 8),

// 16 bits for "time_mid"
substr($hash, 8, 4),

// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 3
(hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000,

// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
(hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,

// 48 bits for "node"
substr($hash, 20, 12)
);
}

public static function v4()
{
return sprintf(
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',

// 32 bits for "time_low"
mt_rand(0, 0xffff),
mt_rand(0, 0xffff),

// 16 bits for "time_mid"
mt_rand(0, 0xffff),

// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,

// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,

// 48 bits for "node"
mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0xffff)
);
}

public static function v5($namespace, $name)
{
if (!self::is_valid($namespace)) return false;

// Get hexadecimal components of namespace
$nhex = str_replace(array('-', '{', '}'), '', $namespace);

// Binary Value
$nstr = '';

// Convert Namespace UUID to bits
for ($i = 0; $i < strlen($nhex); $i += 2) {
$nstr .= chr(hexdec($nhex[$i] . $nhex[$i + 1]));
}

// Calculate hash value
$hash = sha1($nstr . $name);

return sprintf(
'%08s-%04s-%04x-%04x-%12s',

// 32 bits for "time_low"
substr($hash, 0, 8),

// 16 bits for "time_mid"
substr($hash, 8, 4),

// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 5
(hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x5000,

// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
(hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,

// 48 bits for "node"
substr($hash, 20, 12)
);
}

public static function is_valid($uuid)
{
return preg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?' .
'[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i', $uuid) === 1;
}
}
61 changes: 61 additions & 0 deletions requires/Url.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php


class URL
{
private $url = null;
public $scheme, $host, $port, $user, $pass, $path, $query, $fragment, $path_parts;

public function __construct($url)
{
$this->url = $url;
$url_parts = parse_url($this->url);

foreach ($url_parts as $key => $val) {
$this->$key = $val;
}

$this->path_parts = explode("/", trim($this->path, "/"));

return $url;
}

public function __toString()
{
// Build URL
$this->url = "";
if ($this->scheme)
$this->url .= $this->scheme . '://';

if ($this->host)
$this->url .= $this->host;

if ($this->path)
$this->url .= $this->path;

if ($this->query)
$this->url .= '?' . $this->query;

if ($this->fragment)
$this->url .= "#" . $this->fragment;

return $this->url;
}

public function add_parameter($parameter, $value = "")
{
// If URL doesn't have a query string.
if (isset($this->query)) { // Avoid 'Undefined index: query'
parse_str($this->query, $params);
} else {
$params = array();
}

$params[$parameter] = $value; // Overwrite if exists

// Note that this will url_encode all values
$this->query = http_build_query($params);

return $this->__toString();
}
}
9 changes: 9 additions & 0 deletions requires/autoload.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

// Auto loads all files in requires folder
include("Log.php");
include("Utils.php");
include("Route.php");
include("Database.php");
include("Url.php");
include("UUID.php");

0 comments on commit ce256ec

Please sign in to comment.