3600) { $hours = floor($seconds / 3600); } $seconds = $seconds % 3600; $time = str_pad($hours, 2, '0', STR_PAD_LEFT) . gmdate(':i:s', $seconds) . ($milliseconds ? '.' . $milliseconds : ''); $parts = explode(':', $time); $timeExtra = explode('.', $parts[2]); if ($parts[0] !== '00') { // hours return $time; } elseif ($parts[1] !== '00') { // mins return $parts[1] . 'min(s) ' . $timeExtra[0] . 's'; } elseif ($timeExtra[0] !== '00') { // secs return substr($parts[2], 0, 5) . 's | ' . substr($parts[2], 0, 7) * 1000 . 'ms'; } else { return substr($parts[2], 0, 7) * 1000 . 'ms'; } //return $timeExtra[0] . 's ' . (number_format(('0.' . substr($timeExtra[1], 0, 4)), 4, '.', '') * 1000) . 'ms'; //return (number_format(('0.' . substr($timeExtra[1], 0, 4)), 4, '.', '') * 1000) . 'ms'; } public function getExtension($string) { return preg_replace("#(.+)?\.(\w+)(\?.+)?#", "$2", $string); } public function get_browser_name() { $user_agent = $_SERVER['HTTP_USER_AGENT']; if (strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR/')) { return 'Opera'; } elseif (strpos($user_agent, 'Edge')) { return 'Edge'; } elseif (strpos($user_agent, 'Chrome')) { return 'Chrome'; } elseif (strpos($user_agent, 'Safari')) { return 'Safari'; } elseif (strpos($user_agent, 'Firefox')) { return 'Firefox'; } elseif (strpos($user_agent, 'MSIE') || strpos($user_agent, 'Trident/7')) { return 'Internet Explorer'; } return 'Other'; } public function array_filter_key(array $array, $callback) { $matchedKeys = array_filter(array_keys($array), $callback); return array_intersect_key($array, array_flip($matchedKeys)); } public function getOS() { if (PHP_SHLIB_SUFFIX == "dll") { return "win"; } else { return "*nix"; } } // Get Gravatar Email Image public function gravatar($email = '') { $email = md5(strtolower(trim($email))); return "https://www.gravatar.com/avatar/$email?s=100&d=mm"; } // Clean Directory string public function cleanDirectory($path) { $path = str_replace(array('/', '\\'), '/', $path); if (substr($path, -1) != '/') { $path = $path . '/'; } if ($path[0] != '/' && $path[1] != ':') { $path = '/' . $path; } return $path; } // Print output all purrty public function prettyPrint($v, $error = false) { if ($error) { $background = 'red'; $border = 'black'; $text = 'white'; } else { $background = '#f2f2f2'; $border = 'black'; $text = 'black'; } $trace = debug_backtrace()[0]; echo '
' . $trace['file'] . ':' . $trace['line'] . ' ' . gettype($v) . "\n\n" . print_r($v, 1) . '

'; } public function gen_uuid() { 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 function dbExtension($string) { return (substr($string, -3) == '.db') ? $string : $string . '.db'; } public function removeDbExtension($string) { return substr($string, 0, -3); } public function cleanPath($path) { $path = preg_replace('/([^:])(\/{2,})/', '$1/', $path); $path = rtrim($path, '/'); return $path; } public function searchArray($array, $field, $value) { foreach ($array as $key => $item) { if ($item[$field] === $value) return $key; } return false; } public function localURL($url, $force = false) { if ($force) { return true; } if (strpos($url, 'https') !== false) { preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $url, $result); $result = !empty($result); return $result; } return false; } public function arrayIP($string) { if (strpos($string, ',') !== false) { $result = explode(",", $string); } else { $result = array($string); } foreach ($result as &$ip) { $ip = is_numeric(substr($ip, 0, 1)) ? $ip : gethostbyname($ip); } return $result; } public function timeExecution($previous = null) { if (!$previous) { return microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]; } else { return (microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]) - $previous; } } public function getallheaders() { if (!function_exists('getallheaders')) { function getallheaders() { $headers = array(); foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } else { return getallheaders(); } } public function getallheadersi() { return array_change_key_case($this->getallheaders(), CASE_LOWER); } public function random_ascii_string($length) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } // Generate Random string public function randString($length = 10, $chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') { $tmp = ''; for ($i = 0; $i < $length; $i++) { $tmp .= substr(str_shuffle($chars), 0, 1); } return $tmp; } public function isEncrypted($password = null) { return ($password == null || $password == '') ? false : $this->decrypt($password); } public function fillString($string, $length) { $filler = '0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*'; if (strlen($string) < $length) { $diff = $length - strlen($string); $filler = substr($filler, 0, $diff); return $string . $filler; } elseif (strlen($string) > $length) { return substr($string, 0, $length); } else { return $string; } } public function userIP() { if (isset($_SERVER['HTTP_CLIENT_IP'])) { $ipaddress = $_SERVER['HTTP_CLIENT_IP']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_X_FORWARDED'])) { $ipaddress = $_SERVER['HTTP_X_FORWARDED']; } elseif (isset($_SERVER['HTTP_FORWARDED_FOR'])) { $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_FORWARDED'])) { $ipaddress = $_SERVER['HTTP_FORWARDED']; } elseif (isset($_SERVER['REMOTE_ADDR'])) { $ipaddress = $_SERVER['REMOTE_ADDR']; } else { $ipaddress = '127.0.0.1'; } if (strpos($ipaddress, ',') !== false) { list($first, $last) = explode(",", $ipaddress); unset($last); return $first; } else { return $ipaddress; } } public function serverIP() { if (array_key_exists('SERVER_ADDR', $_SERVER)) { return $_SERVER['SERVER_ADDR']; } return '127.0.0.1'; } public function parseDomain($value, $force = false) { $badDomains = array('ddns.net', 'ddnsking.com', '3utilities.com', 'bounceme.net', 'freedynamicdns.net', 'freedynamicdns.org', 'gotdns.ch', 'hopto.org', 'myddns.me', 'myds.me', 'myftp.biz', 'myftp.org', 'myvnc.com', 'noip.com', 'onthewifi.com', 'redirectme.net', 'serveblog.net', 'servecounterstrike.com', 'serveftp.com', 'servegame.com', 'servehalflife.com', 'servehttp.com', 'serveirc.com', 'serveminecraft.net', 'servemp3.com', 'servepics.com', 'servequake.com', 'sytes.net', 'viewdns.net', 'webhop.me', 'zapto.org'); $Domain = $value; $Port = strpos($Domain, ':'); if ($Port !== false) { $Domain = substr($Domain, 0, $Port); $value = $Domain; } $check = substr_count($Domain, '.'); if ($check >= 3) { if (is_numeric($Domain[0])) { $Domain = ''; } else { if (in_array(strtolower(explode('.', $Domain)[2] . '.' . explode('.', $Domain)[3]), $badDomains)) { $Domain = '.' . explode('.', $Domain)[0] . '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2] . '.' . explode('.', $Domain)[3]; } else { $Domain = '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2] . '.' . explode('.', $Domain)[3]; } } } elseif ($check == 2) { if (in_array(strtolower(explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2]), $badDomains)) { $Domain = '.' . explode('.', $Domain)[0] . '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2]; } elseif (explode('.', $Domain)[0] == 'www') { $Domain = '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2]; } elseif (explode('.', $Domain)[1] == 'co') { $Domain = '.' . explode('.', $Domain)[0] . '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2]; } else { $Domain = '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2]; } } elseif ($check == 1) { $Domain = '.' . $Domain; } else { $Domain = ''; } return ($force) ? $value : $Domain; } // Cookie Custom Function public function coookie($type, $name, $value = '', $days = -1, $http = true, $path = '/') { $days = ($days > 365) ? 365 : $days; if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") { $Secure = true; $HTTPOnly = true; } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' && $_SERVER['HTTPS'] !== '') { $Secure = true; $HTTPOnly = true; } else { $Secure = false; $HTTPOnly = false; } if (!$http) { $HTTPOnly = false; } $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_HOST'] ?? ''; $Domain = $this->parseDomain($_SERVER['HTTP_HOST']); $DomainTest = $this->parseDomain($_SERVER['HTTP_HOST'], true); if ($type == 'set') { $_COOKIE[$name] = $value; header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value) . (empty($days) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() + (86400 * $days)) . ' GMT') . (empty($path) ? '' : '; path=' . $path) . (empty($Domain) ? '' : '; domain=' . $Domain) . (!$Secure ? '' : '; SameSite=None; Secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value) . (empty($days) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() + (86400 * $days)) . ' GMT') . (empty($path) ? '' : '; path=' . $path) . (empty($Domain) ? '' : '; domain=' . $DomainTest) . (!$Secure ? '' : '; SameSite=None; Secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); } elseif ($type == 'delete') { unset($_COOKIE[$name]); header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value) . (empty($days) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() - 3600) . ' GMT') . (empty($path) ? '' : '; path=' . $path) . (empty($Domain) ? '' : '; domain=' . $Domain) . (!$Secure ? '' : '; SameSite=None; Secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value) . (empty($days) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() - 3600) . ' GMT') . (empty($path) ? '' : '; path=' . $path) . (empty($Domain) ? '' : '; domain=' . $DomainTest) . (!$Secure ? '' : '; SameSite=None; Secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); } } public function coookieSeconds($type, $name, $value = '', $ms = null, $http = true, $path = '/') { if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") { $Secure = true; $HTTPOnly = true; } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' && $_SERVER['HTTPS'] !== '') { $Secure = true; $HTTPOnly = true; } else { $Secure = false; $HTTPOnly = false; } if (!$http) { $HTTPOnly = false; } $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_HOST'] ?? ''; $Domain = $this->parseDomain($_SERVER['HTTP_HOST']); $DomainTest = $this->parseDomain($_SERVER['HTTP_HOST'], true); if ($type == 'set') { $_COOKIE[$name] = $value; header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value) . (empty($ms) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() + ($ms / 1000)) . ' GMT') . (empty($path) ? '' : '; path=' . $path) . (empty($Domain) ? '' : '; domain=' . $Domain) . (!$Secure ? '' : '; SameSite=None; Secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value) . (empty($ms) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() + ($ms / 1000)) . ' GMT') . (empty($path) ? '' : '; path=' . $path) . (empty($Domain) ? '' : '; domain=' . $DomainTest) . (!$Secure ? '' : '; SameSite=None; Secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); } elseif ($type == 'delete') { unset($_COOKIE[$name]); header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value) . (empty($ms) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() - 3600) . ' GMT') . (empty($path) ? '' : '; path=' . $path) . (empty($Domain) ? '' : '; domain=' . $Domain) . (!$Secure ? '' : '; SameSite=None; Secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value) . (empty($ms) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() - 3600) . ' GMT') . (empty($path) ? '' : '; path=' . $path) . (empty($Domain) ? '' : '; domain=' . $DomainTest) . (!$Secure ? '' : '; SameSite=None; Secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); } } // Qualify URL public function qualifyURL($url, $return = false, $includeTrailing = false) { //local address? if (substr($url, 0, 1) == "/") { if ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || (isset($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] != 'off') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] != 'http')) { $protocol = "https://"; } else { $protocol = "http://"; } $url = $protocol . $this->getServer() . $url; } // Get Digest $digest = $includeTrailing ? parse_url($url) : parse_url(rtrim(preg_replace('/\s+/', '', $url), '/')); // http/https if (!isset($digest['scheme'])) { $scheme = 'http'; } else { $scheme = $digest['scheme']; } // Host $host = ($digest['host'] ?? ''); // Port $port = (isset($digest['port']) ? ':' . $digest['port'] : ''); // Path $path = ($digest['path'] ?? ''); // Query $query = (isset($digest['query']) ? '?' . $digest['query'] : ''); // Fragment $fragment = (isset($digest['fragment']) ? '#' . $digest['fragment'] : ''); // Output $array = [ 'scheme' => $scheme, 'host' => $host, 'port' => $port, 'path' => $path, 'query' => $query, 'fragment' => $fragment, 'digest' => $digest ]; return ($return) ? $array : $scheme . '://' . $host . $port . $path . $query . $fragment; } public function getServer($over = false) { if ($over) { if ($this->config['PHPMAILER-domain'] !== '') { return $this->config['PHPMAILER-domain']; } } return isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : $_SERVER["SERVER_NAME"]; } public function getServerPath($over = false) { if ($over) { if ($this->config['PHPMAILER-domain'] !== '') { return $this->config['PHPMAILER-domain']; } } if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") { $protocol = "https://"; } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { $protocol = "https://"; } else { $protocol = "http://"; } $domain = ''; if (isset($_SERVER['SERVER_NAME']) && strpos($_SERVER['SERVER_NAME'], '.') !== false) { $domain = $_SERVER['SERVER_NAME']; } elseif (isset($_SERVER['HTTP_HOST'])) { if (strpos($_SERVER['HTTP_HOST'], ':') !== false) { $domain = explode(':', $_SERVER['HTTP_HOST'])[0]; $port = explode(':', $_SERVER['HTTP_HOST'])[1]; if ($port !== "80" && $port !== "443") { $domain = $_SERVER['HTTP_HOST']; } } else { $domain = $_SERVER['HTTP_HOST']; } } $path = str_replace("\\", "/", dirname($_SERVER['REQUEST_URI'])); $path = ($path !== '.') ? $path : ''; $url = $protocol . $domain . $path; if (strpos($url, '/api') !== false) { $url = explode('/api', $url); return $url[0] . '/'; } else { return $url; } } public function convertIPToRange($ip) { $ip = trim($ip); if (strpos($ip, '/') !== false) { $explodeIP = explode('/', $ip); $prefix = $explodeIP[1]; $start_ip = $explodeIP[0]; $explodeStart = explode('.', $start_ip); if (count($explodeStart) == 4) { $explodeStart[3] = $prefix == 32 ? $explodeStart[3] : 0; $start_ip = implode('.', $explodeStart); } $ip_count = 1 << (32 - $prefix); $start_ip_long = long2ip(ip2long($start_ip)); $last_ip_long = long2ip(ip2long($start_ip) + $ip_count - 1); } elseif (substr_count($ip, '.') == 3) { $start_ip_long = long2ip(ip2long($ip)); $last_ip_long = long2ip(ip2long($ip)); } else { return false; } return [ 'from' => $start_ip_long, 'to' => $last_ip_long ]; } public function convertIPStringToRange($string = null) { $ips = []; if ($string) { $ipListing = explode(',', $string); if (count($ipListing) > 0) { foreach ($ipListing as $ip) { $ips[] = $this->convertIPToRange($ip); } } } return $ips; } public function localIPRanges() { $mainArray = [ [ 'from' => '10.0.0.0', 'to' => '10.255.255.255' ], [ 'from' => '172.16.0.0', 'to' => '172.31.255.255' ], [ 'from' => '192.168.0.0', 'to' => '192.168.255.255' ], [ 'from' => '127.0.0.1', 'to' => '127.255.255.255' ], ]; if (isset($this->config['localIPList'])) { if ($this->config['localIPList'] !== '') { $ipListing = explode(',', $this->config['localIPList']); if (count($ipListing) > 0) { foreach ($ipListing as $ip) { $ipInfo = $this->convertIPToRange($ip); if ($ipInfo) { array_push($mainArray, $ipInfo); } } } } } /* if ($this->config['localIPFrom']) { $from = trim($this->config['localIPFrom']); $override = true; } if ($this->config['localIPTo']) { $to = trim($this->config['localIPTo']); } if ($override) { $newArray = array( 'from' => $from, 'to' => (isset($to)) ? $to : $from ); array_push($mainArray, $newArray); } */ return $mainArray; } public function isLocal($checkIP = null) { $isLocal = false; $userIP = ($checkIP) ? ip2long($checkIP) : ip2long($this->userIP()); $range = $this->localIPRanges(); foreach ($range as $ip) { $low = ip2long($ip['from']); $high = ip2long($ip['to']); if ($userIP <= $high && $low <= $userIP) { $isLocal = true; } } return $isLocal; } public function isLocalOrServer() { $isLocalOrServer = false; $isLocal = $this->isLocal(); if (!$isLocal) { if ($this->userIP() == $this->serverIP()) { $isLocalOrServer = true; } } else { $isLocalOrServer = true; } return $isLocalOrServer; } public function human_filesize($bytes, $dec = 2) { $bytes = number_format($bytes, 0, '.', ''); $size = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $factor = floor((strlen($bytes) - 1) / 3); return sprintf("%.{$dec}f %s", $bytes / (1024 ** $factor), $size[$factor]); } public function apiResponseFormatter($response) { if (is_array($response)) { return $response; } if (empty($response) || $response == '') { return ['api_response' => 'No data']; } if ($this->json_validator($response)) { return json_decode($response, true); } return ['api_response' => 'No data']; } public function json_validator($data = null) { if (!empty($data)) { @json_decode($data); return (json_last_error() === JSON_ERROR_NONE); } return false; } public function replace_first($search_str, $replacement_str, $src_str) { return (false !== ($pos = strpos($src_str, $search_str))) ? substr_replace($src_str, $replacement_str, $pos, strlen($search_str)) : $src_str; } /** * Check if an array is a multidimensional array. * * @param array $arr The array to check * @return boolean Whether the the array is a multidimensional array or not */ public function is_multi_array($x) { if (count(array_filter($x, 'is_array')) > 0) return true; return false; } /** * Convert an object to an array. * * @param array $object The object to convert * @return array The converted array */ public function object_to_array($object) { if (!is_object($object) && !is_array($object)) return $object; return array_map(array($this, 'object_to_array'), (array)$object); } /** * Check if a value exists in the array/object. * * @param mixed $needle The value that you are searching for * @param mixed $haystack The array/object to search * @param boolean $strict Whether to use strict search or not * @return boolean Whether the value was found or not */ public function search_for_value($needle, $haystack, $strict = true) { $haystack = $this->object_to_array($haystack); if (is_array($haystack)) { if ($this->is_multi_array($haystack)) { // Multidimensional array foreach ($haystack as $subhaystack) { if ($this->search_for_value($needle, $subhaystack, $strict)) { return true; } } } elseif (array_keys($haystack) !== range(0, count($haystack) - 1)) { // Associative array foreach ($haystack as $key => $val) { if ($needle == $val && !$strict) { return true; } elseif ($needle === $val && $strict) { return true; } } return false; } else { // Normal array if ($needle == $haystack && !$strict) { return true; } elseif ($needle === $haystack && $strict) { return true; } } } return false; } public function makeDir($dirPath, $mode = 0777) { return is_dir($dirPath) || @mkdir($dirPath, $mode, true); } } // Leave for deluge class function getCert() { $url = 'http://curl.haxx.se/ca/cacert.pem'; $file = __DIR__ . DIRECTORY_SEPARATOR . 'cert' . DIRECTORY_SEPARATOR . 'cacert.pem'; $file2 = __DIR__ . DIRECTORY_SEPARATOR . 'cert' . DIRECTORY_SEPARATOR . 'cacert-initial.pem'; $useCert = (file_exists($file)) ? $file : $file2; $context = stream_context_create( array( 'ssl' => array( 'verify_peer' => true, 'cafile' => $useCert ) ) ); if (!file_exists($file)) { file_put_contents($file, fopen($url, 'r', false, $context)); } elseif (file_exists($file) && time() - 2592000 > filemtime($file)) { file_put_contents($file, fopen($url, 'r', false, $context)); } return $file; } // Leave for deluge class function localURL($url, $force = false) { if ($force) { return true; } if (strpos($url, 'https') !== false) { preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $url, $result); $result = (!empty($result) ? true : false); return $result; } return false; } // Maybe use later? function curl($curl, $url, $headers = array(), $data = array()) { // Initiate cURL $curlReq = curl_init($url); if (in_array(trim(strtoupper($curl)), ["GET", "POST", "PUT", "DELETE"])) { curl_setopt($curlReq, CURLOPT_CUSTOMREQUEST, trim(strtoupper($curl))); } else { return null; } curl_setopt($curlReq, CURLOPT_RETURNTRANSFER, true); curl_setopt($curlReq, CURLOPT_CAINFO, getCert()); curl_setopt($curlReq, CURLOPT_CONNECTTIMEOUT, 5); if (localURL($url)) { curl_setopt($curlReq, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curlReq, CURLOPT_SSL_VERIFYPEER, 0); } // Format Headers $cHeaders = array(); foreach ($headers as $k => $v) { $cHeaders[] = $k . ': ' . $v; } if (count($cHeaders)) { curl_setopt($curlReq, CURLOPT_HTTPHEADER, $cHeaders); } // Format Data switch (isset($headers['Content-Type']) ? $headers['Content-Type'] : '') { case 'application/json': curl_setopt($curlReq, CURLOPT_POSTFIELDS, json_encode($data)); break; case 'application/x-www-form-urlencoded': curl_setopt($curlReq, CURLOPT_POSTFIELDS, http_build_query($data)); break; default: $headers['Content-Type'] = 'application/x-www-form-urlencoded'; curl_setopt($curlReq, CURLOPT_POSTFIELDS, http_build_query($data)); } // Execute $result = curl_exec($curlReq); $httpcode = curl_getinfo($curlReq); // Close curl_close($curlReq); // Return return array('content' => $result, 'http_code' => $httpcode); } // Maybe use later? function getHeaders($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 3); curl_setopt($ch, CURLOPT_CAINFO, getCert()); if (localURL($url)) { curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); } curl_exec($ch); $headers = curl_getinfo($ch); curl_close($ch); return $headers; } // Maybe use later? function download($url, $path) { ini_set('max_execution_time', 0); set_time_limit(0); $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_CAINFO, getCert()); if (localURL($url)) { curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); } $raw_file_data = curl_exec($ch); curl_close($ch); file_put_contents($path, $raw_file_data); return (filesize($path) > 0) ? true : false; } // swagger function getServerPath($over = false) { if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") { $protocol = "https://"; } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { $protocol = "https://"; } else { $protocol = "http://"; } $domain = ''; if (isset($_SERVER['SERVER_NAME']) && strpos($_SERVER['SERVER_NAME'], '.') !== false) { $domain = $_SERVER['SERVER_NAME']; } elseif (isset($_SERVER['HTTP_HOST'])) { if (strpos($_SERVER['HTTP_HOST'], ':') !== false) { $domain = explode(':', $_SERVER['HTTP_HOST'])[0]; $port = explode(':', $_SERVER['HTTP_HOST'])[1]; if ($port !== "80" && $port !== "443") { $domain = $_SERVER['HTTP_HOST']; } } else { $domain = $_SERVER['HTTP_HOST']; } } $url = $protocol . $domain . str_replace("\\", "/", dirname($_SERVER['REQUEST_URI'])); if (strpos($url, '/api') !== false) { $url = explode('/api', $url); return $url[0] . '/'; } else { return $url; } } // used for api return function safe_json_encode($value, $options = 0, $depth = 512) { $encoded = json_encode($value, $options, $depth); if ($encoded === false && $value && json_last_error() == JSON_ERROR_UTF8) { $encoded = json_encode(utf8ize($value), $options, $depth); } return $encoded; } // used for api return function utf8ize($mixed) { if (is_array($mixed)) { foreach ($mixed as $key => $value) { $mixed[$key] = utf8ize($value); } } elseif (is_string($mixed)) { return mb_convert_encoding($mixed, "UTF-8", "UTF-8"); } return $mixed; }