normal-functions.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. <?php
  2. trait NormalFunctions
  3. {
  4. public function formatSeconds($seconds)
  5. {
  6. $hours = 0;
  7. $milliseconds = str_replace("0.", '', $seconds - floor($seconds));
  8. if ($seconds > 3600) {
  9. $hours = floor($seconds / 3600);
  10. }
  11. $seconds = $seconds % 3600;
  12. $time = str_pad($hours, 2, '0', STR_PAD_LEFT)
  13. . gmdate(':i:s', $seconds)
  14. . ($milliseconds ? '.' . $milliseconds : '');
  15. $parts = explode(':', $time);
  16. $timeExtra = explode('.', $parts[2]);
  17. if ($parts[0] !== '00') { // hours
  18. return $time;
  19. } elseif ($parts[1] !== '00') { // mins
  20. return $parts[1] . 'min(s) ' . $timeExtra[0] . 's';
  21. } elseif ($timeExtra[0] !== '00') { // secs
  22. return substr($parts[2], 0, 5) . 's | ' . substr($parts[2], 0, 7) * 1000 . 'ms';
  23. } else {
  24. return substr($parts[2], 0, 7) * 1000 . 'ms';
  25. }
  26. //return $timeExtra[0] . 's ' . (number_format(('0.' . substr($timeExtra[1], 0, 4)), 4, '.', '') * 1000) . 'ms';
  27. //return (number_format(('0.' . substr($timeExtra[1], 0, 4)), 4, '.', '') * 1000) . 'ms';
  28. }
  29. public function getExtension($string)
  30. {
  31. return preg_replace("#(.+)?\.(\w+)(\?.+)?#", "$2", $string);
  32. }
  33. public function get_browser_name()
  34. {
  35. $user_agent = $_SERVER['HTTP_USER_AGENT'];
  36. if (strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR/')) {
  37. return 'Opera';
  38. } elseif (strpos($user_agent, 'Edge')) {
  39. return 'Edge';
  40. } elseif (strpos($user_agent, 'Chrome')) {
  41. return 'Chrome';
  42. } elseif (strpos($user_agent, 'Safari')) {
  43. return 'Safari';
  44. } elseif (strpos($user_agent, 'Firefox')) {
  45. return 'Firefox';
  46. } elseif (strpos($user_agent, 'MSIE') || strpos($user_agent, 'Trident/7')) {
  47. return 'Internet Explorer';
  48. }
  49. return 'Other';
  50. }
  51. public function array_filter_key(array $array, $callback)
  52. {
  53. $matchedKeys = array_filter(array_keys($array), $callback);
  54. return array_intersect_key($array, array_flip($matchedKeys));
  55. }
  56. public function getOS()
  57. {
  58. if (PHP_SHLIB_SUFFIX == "dll") {
  59. return "win";
  60. } else {
  61. return "*nix";
  62. }
  63. }
  64. // Get Gravatar Email Image
  65. public function gravatar($email = '')
  66. {
  67. $email = md5(strtolower(trim($email)));
  68. return "https://www.gravatar.com/avatar/$email?s=100&d=mm";
  69. }
  70. // Clean Directory string
  71. public function cleanDirectory($path)
  72. {
  73. $path = str_replace(array('/', '\\'), '/', $path);
  74. if (substr($path, -1) != '/') {
  75. $path = $path . '/';
  76. }
  77. if ($path[0] != '/' && $path[1] != ':') {
  78. $path = '/' . $path;
  79. }
  80. return $path;
  81. }
  82. // Print output all purrty
  83. public function prettyPrint($v)
  84. {
  85. $trace = debug_backtrace()[0];
  86. echo '<pre style="white-space: pre; text-overflow: ellipsis; overflow: hidden; background-color: #f2f2f2; border: 2px solid black; border-radius: 5px; padding: 5px; margin: 5px;">' . $trace['file'] . ':' . $trace['line'] . ' ' . gettype($v) . "\n\n" . print_r($v, 1) . '</pre><br/>';
  87. }
  88. public function gen_uuid()
  89. {
  90. return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
  91. // 32 bits for "time_low"
  92. mt_rand(0, 0xffff), mt_rand(0, 0xffff),
  93. // 16 bits for "time_mid"
  94. mt_rand(0, 0xffff),
  95. // 16 bits for "time_hi_and_version",
  96. // four most significant bits holds version number 4
  97. mt_rand(0, 0x0fff) | 0x4000,
  98. // 16 bits, 8 bits for "clk_seq_hi_res",
  99. // 8 bits for "clk_seq_low",
  100. // two most significant bits holds zero and one for variant DCE1.1
  101. mt_rand(0, 0x3fff) | 0x8000,
  102. // 48 bits for "node"
  103. mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
  104. );
  105. }
  106. public function dbExtension($string)
  107. {
  108. return (substr($string, -3) == '.db') ? $string : $string . '.db';
  109. }
  110. public function cleanPath($path)
  111. {
  112. $path = preg_replace('/([^:])(\/{2,})/', '$1/', $path);
  113. $path = rtrim($path, '/');
  114. return $path;
  115. }
  116. public function searchArray($array, $field, $value)
  117. {
  118. foreach ($array as $key => $item) {
  119. if ($item[$field] === $value)
  120. return $key;
  121. }
  122. return false;
  123. }
  124. public function localURL($url, $force = false)
  125. {
  126. if ($force) {
  127. return true;
  128. }
  129. if (strpos($url, 'https') !== false) {
  130. preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $url, $result);
  131. $result = !empty($result);
  132. return $result;
  133. }
  134. return false;
  135. }
  136. public function arrayIP($string)
  137. {
  138. if (strpos($string, ',') !== false) {
  139. $result = explode(",", $string);
  140. } else {
  141. $result = array($string);
  142. }
  143. foreach ($result as &$ip) {
  144. $ip = is_numeric(substr($ip, 0, 1)) ? $ip : gethostbyname($ip);
  145. }
  146. return $result;
  147. }
  148. public function timeExecution($previous = null)
  149. {
  150. if (!$previous) {
  151. return microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
  152. } else {
  153. return (microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]) - $previous;
  154. }
  155. }
  156. public function getallheaders()
  157. {
  158. if (!function_exists('getallheaders')) {
  159. function getallheaders()
  160. {
  161. $headers = array();
  162. foreach ($_SERVER as $name => $value) {
  163. if (substr($name, 0, 5) == 'HTTP_') {
  164. $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
  165. }
  166. }
  167. return $headers;
  168. }
  169. } else {
  170. return getallheaders();
  171. }
  172. }
  173. public function random_ascii_string($length)
  174. {
  175. $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  176. $charactersLength = strlen($characters);
  177. $randomString = '';
  178. for ($i = 0; $i < $length; $i++) {
  179. $randomString .= $characters[rand(0, $charactersLength - 1)];
  180. }
  181. return $randomString;
  182. }
  183. // Generate Random string
  184. public function randString($length = 10, $chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  185. {
  186. $tmp = '';
  187. for ($i = 0; $i < $length; $i++) {
  188. $tmp .= substr(str_shuffle($chars), 0, 1);
  189. }
  190. return $tmp;
  191. }
  192. public function isEncrypted($password)
  193. {
  194. switch (strlen($password)) {
  195. case '24':
  196. case '88':
  197. return strpos($password, '==') !== false;
  198. case '44':
  199. case '108':
  200. return substr($password, -1, 1) == '=';
  201. case '64':
  202. return true;
  203. default:
  204. return false;
  205. }
  206. }
  207. public function fillString($string, $length)
  208. {
  209. $filler = '0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*';
  210. if (strlen($string) < $length) {
  211. $diff = $length - strlen($string);
  212. $filler = substr($filler, 0, $diff);
  213. return $string . $filler;
  214. } elseif (strlen($string) > $length) {
  215. return substr($string, 0, $length);
  216. } else {
  217. return $string;
  218. }
  219. }
  220. public function userIP()
  221. {
  222. if (isset($_SERVER['HTTP_CLIENT_IP'])) {
  223. $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
  224. } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  225. $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
  226. } elseif (isset($_SERVER['HTTP_X_FORWARDED'])) {
  227. $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
  228. } elseif (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
  229. $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
  230. } elseif (isset($_SERVER['HTTP_FORWARDED'])) {
  231. $ipaddress = $_SERVER['HTTP_FORWARDED'];
  232. } elseif (isset($_SERVER['REMOTE_ADDR'])) {
  233. $ipaddress = $_SERVER['REMOTE_ADDR'];
  234. } else {
  235. $ipaddress = 'UNKNOWN';
  236. }
  237. if (strpos($ipaddress, ',') !== false) {
  238. list($first, $last) = explode(",", $ipaddress);
  239. unset($last);
  240. return $first;
  241. } else {
  242. return $ipaddress;
  243. }
  244. }
  245. public function parseDomain($value, $force = false)
  246. {
  247. $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');
  248. $Domain = $value;
  249. $Port = strpos($Domain, ':');
  250. if ($Port !== false) {
  251. $Domain = substr($Domain, 0, $Port);
  252. $value = $Domain;
  253. }
  254. $check = substr_count($Domain, '.');
  255. if ($check >= 3) {
  256. if (is_numeric($Domain[0])) {
  257. $Domain = '';
  258. } else {
  259. if (in_array(strtolower(explode('.', $Domain)[2] . '.' . explode('.', $Domain)[3]), $badDomains)) {
  260. $Domain = '.' . explode('.', $Domain)[0] . '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2] . '.' . explode('.', $Domain)[3];
  261. } else {
  262. $Domain = '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2] . '.' . explode('.', $Domain)[3];
  263. }
  264. }
  265. } elseif ($check == 2) {
  266. if (in_array(strtolower(explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2]), $badDomains)) {
  267. $Domain = '.' . explode('.', $Domain)[0] . '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2];
  268. } elseif (explode('.', $Domain)[0] == 'www') {
  269. $Domain = '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2];
  270. } elseif (explode('.', $Domain)[1] == 'co') {
  271. $Domain = '.' . explode('.', $Domain)[0] . '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2];
  272. } else {
  273. $Domain = '.' . explode('.', $Domain)[1] . '.' . explode('.', $Domain)[2];
  274. }
  275. } elseif ($check == 1) {
  276. $Domain = '.' . $Domain;
  277. } else {
  278. $Domain = '';
  279. }
  280. return ($force) ? $value : $Domain;
  281. }
  282. // Cookie Custom Function
  283. public function coookie($type, $name, $value = '', $days = -1, $http = true, $path = '/')
  284. {
  285. $days = ($days > 365) ? 365 : $days;
  286. if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") {
  287. $Secure = true;
  288. $HTTPOnly = true;
  289. } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' && $_SERVER['HTTPS'] !== '') {
  290. $Secure = true;
  291. $HTTPOnly = true;
  292. } else {
  293. $Secure = false;
  294. $HTTPOnly = false;
  295. }
  296. if (!$http) {
  297. $HTTPOnly = false;
  298. }
  299. $Domain = $this->parseDomain($_SERVER['HTTP_HOST']);
  300. $DomainTest = $this->parseDomain($_SERVER['HTTP_HOST'], true);
  301. if ($type == 'set') {
  302. $_COOKIE[$name] = $value;
  303. header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value)
  304. . (empty($days) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() + (86400 * $days)) . ' GMT')
  305. . (empty($path) ? '' : '; path=' . $path)
  306. . (empty($Domain) ? '' : '; domain=' . $Domain)
  307. . (!$Secure ? '' : '; SameSite=None; Secure')
  308. . (!$HTTPOnly ? '' : '; HttpOnly'), false);
  309. header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value)
  310. . (empty($days) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() + (86400 * $days)) . ' GMT')
  311. . (empty($path) ? '' : '; path=' . $path)
  312. . (empty($Domain) ? '' : '; domain=' . $DomainTest)
  313. . (!$Secure ? '' : '; SameSite=None; Secure')
  314. . (!$HTTPOnly ? '' : '; HttpOnly'), false);
  315. } elseif ($type == 'delete') {
  316. unset($_COOKIE[$name]);
  317. header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value)
  318. . (empty($days) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() - 3600) . ' GMT')
  319. . (empty($path) ? '' : '; path=' . $path)
  320. . (empty($Domain) ? '' : '; domain=' . $Domain)
  321. . (!$Secure ? '' : '; SameSite=None; Secure')
  322. . (!$HTTPOnly ? '' : '; HttpOnly'), false);
  323. header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value)
  324. . (empty($days) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() - 3600) . ' GMT')
  325. . (empty($path) ? '' : '; path=' . $path)
  326. . (empty($Domain) ? '' : '; domain=' . $DomainTest)
  327. . (!$Secure ? '' : '; SameSite=None; Secure')
  328. . (!$HTTPOnly ? '' : '; HttpOnly'), false);
  329. }
  330. }
  331. public function coookieSeconds($type, $name, $value = '', $ms = null, $http = true, $path = '/')
  332. {
  333. if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") {
  334. $Secure = true;
  335. $HTTPOnly = true;
  336. } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' && $_SERVER['HTTPS'] !== '') {
  337. $Secure = true;
  338. $HTTPOnly = true;
  339. } else {
  340. $Secure = false;
  341. $HTTPOnly = false;
  342. }
  343. if (!$http) {
  344. $HTTPOnly = false;
  345. }
  346. $Domain = $this->parseDomain($_SERVER['HTTP_HOST']);
  347. $DomainTest = $this->parseDomain($_SERVER['HTTP_HOST'], true);
  348. if ($type == 'set') {
  349. $_COOKIE[$name] = $value;
  350. header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value)
  351. . (empty($ms) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() + ($ms / 1000)) . ' GMT')
  352. . (empty($path) ? '' : '; path=' . $path)
  353. . (empty($Domain) ? '' : '; domain=' . $Domain)
  354. . (!$Secure ? '' : '; SameSite=None; Secure')
  355. . (!$HTTPOnly ? '' : '; HttpOnly'), false);
  356. header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value)
  357. . (empty($ms) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() + ($ms / 1000)) . ' GMT')
  358. . (empty($path) ? '' : '; path=' . $path)
  359. . (empty($Domain) ? '' : '; domain=' . $DomainTest)
  360. . (!$Secure ? '' : '; SameSite=None; Secure')
  361. . (!$HTTPOnly ? '' : '; HttpOnly'), false);
  362. } elseif ($type == 'delete') {
  363. unset($_COOKIE[$name]);
  364. header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value)
  365. . (empty($ms) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() - 3600) . ' GMT')
  366. . (empty($path) ? '' : '; path=' . $path)
  367. . (empty($Domain) ? '' : '; domain=' . $Domain)
  368. . (!$Secure ? '' : '; SameSite=None; Secure')
  369. . (!$HTTPOnly ? '' : '; HttpOnly'), false);
  370. header('Set-Cookie: ' . rawurlencode($name) . '=' . rawurlencode($value)
  371. . (empty($ms) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s', time() - 3600) . ' GMT')
  372. . (empty($path) ? '' : '; path=' . $path)
  373. . (empty($Domain) ? '' : '; domain=' . $DomainTest)
  374. . (!$Secure ? '' : '; SameSite=None; Secure')
  375. . (!$HTTPOnly ? '' : '; HttpOnly'), false);
  376. }
  377. }
  378. // Qualify URL
  379. public function qualifyURL($url, $return = false)
  380. {
  381. //local address?
  382. if (substr($url, 0, 1) == "/") {
  383. if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
  384. $protocol = "https://";
  385. } else {
  386. $protocol = "http://";
  387. }
  388. $url = $protocol . $this->getServer() . $url;
  389. }
  390. // Get Digest
  391. $digest = parse_url(rtrim(preg_replace('/\s+/', '', $url), '/'));
  392. // http/https
  393. if (!isset($digest['scheme'])) {
  394. $scheme = 'http';
  395. } else {
  396. $scheme = $digest['scheme'];
  397. }
  398. // Host
  399. $host = (isset($digest['host']) ? $digest['host'] : '');
  400. // Port
  401. $port = (isset($digest['port']) ? ':' . $digest['port'] : '');
  402. // Path
  403. $path = (isset($digest['path']) ? $digest['path'] : '');
  404. // Query
  405. $query = (isset($digest['query']) ? '?' . $digest['query'] : '');
  406. // Output
  407. $array = array(
  408. 'scheme' => $scheme,
  409. 'host' => $host,
  410. 'port' => $port,
  411. 'path' => $path,
  412. 'query' => $query
  413. );
  414. return ($return) ? $array : $scheme . '://' . $host . $port . $path . $query;
  415. }
  416. public function getServer($over = false)
  417. {
  418. if ($over) {
  419. if ($this->config['PHPMAILER-domain'] !== '') {
  420. return $this->config['PHPMAILER-domain'];
  421. }
  422. }
  423. return isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : $_SERVER["SERVER_NAME"];
  424. }
  425. public function getServerPath($over = false)
  426. {
  427. if ($over) {
  428. if ($this->config['PHPMAILER-domain'] !== '') {
  429. return $this->config['PHPMAILER-domain'];
  430. }
  431. }
  432. if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") {
  433. $protocol = "https://";
  434. } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
  435. $protocol = "https://";
  436. } else {
  437. $protocol = "http://";
  438. }
  439. $domain = '';
  440. if (isset($_SERVER['SERVER_NAME']) && strpos($_SERVER['SERVER_NAME'], '.') !== false) {
  441. $domain = $_SERVER['SERVER_NAME'];
  442. } elseif (isset($_SERVER['HTTP_HOST'])) {
  443. if (strpos($_SERVER['HTTP_HOST'], ':') !== false) {
  444. $domain = explode(':', $_SERVER['HTTP_HOST'])[0];
  445. $port = explode(':', $_SERVER['HTTP_HOST'])[1];
  446. if ($port !== "80" && $port !== "443") {
  447. $domain = $_SERVER['HTTP_HOST'];
  448. }
  449. } else {
  450. $domain = $_SERVER['HTTP_HOST'];
  451. }
  452. }
  453. $path = str_replace("\\", "/", dirname($_SERVER['REQUEST_URI']));
  454. $path = ($path !== '.') ? $path : '';
  455. $url = $protocol . $domain . $path;
  456. if (strpos($url, '/api') !== false) {
  457. $url = explode('/api', $url);
  458. return $url[0] . '/';
  459. } else {
  460. return $url;
  461. }
  462. }
  463. public function localIPRanges()
  464. {
  465. $mainArray = array(
  466. array(
  467. 'from' => '10.0.0.0',
  468. 'to' => '10.255.255.255'
  469. ),
  470. array(
  471. 'from' => '172.16.0.0',
  472. 'to' => '172.31.255.255'
  473. ),
  474. array(
  475. 'from' => '192.168.0.0',
  476. 'to' => '192.168.255.255'
  477. ),
  478. array(
  479. 'from' => '127.0.0.1',
  480. 'to' => '127.255.255.255'
  481. ),
  482. );
  483. $override = false;
  484. if ($this->config['localIPFrom']) {
  485. $from = trim($this->config['localIPFrom']);
  486. $override = true;
  487. }
  488. if ($this->config['localIPTo']) {
  489. $to = trim($this->config['localIPTo']);
  490. }
  491. if ($override) {
  492. $newArray = array(
  493. 'from' => $from,
  494. 'to' => (isset($to)) ? $to : $from
  495. );
  496. array_push($mainArray, $newArray);
  497. }
  498. return $mainArray;
  499. }
  500. public function isLocal($checkIP = null)
  501. {
  502. $isLocal = false;
  503. $userIP = ($checkIP) ? ip2long($checkIP) : ip2long($this->userIP());
  504. $range = $this->localIPRanges();
  505. foreach ($range as $ip) {
  506. $low = ip2long($ip['from']);
  507. $high = ip2long($ip['to']);
  508. if ($userIP <= $high && $low <= $userIP) {
  509. $isLocal = true;
  510. }
  511. }
  512. return $isLocal;
  513. }
  514. public function human_filesize($bytes, $dec = 2)
  515. {
  516. $bytes = number_format($bytes, 0, '.', '');
  517. $size = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
  518. $factor = floor((strlen($bytes) - 1) / 3);
  519. return sprintf("%.{$dec}f %s", $bytes / (1024 ** $factor), $size[$factor]);
  520. }
  521. public function json_validator($data = null)
  522. {
  523. if (!empty($data)) {
  524. @json_decode($data);
  525. return (json_last_error() === JSON_ERROR_NONE);
  526. }
  527. return false;
  528. }
  529. }
  530. // Leave for deluge class
  531. function getCert()
  532. {
  533. $url = 'http://curl.haxx.se/ca/cacert.pem';
  534. $file = __DIR__ . DIRECTORY_SEPARATOR . 'cert' . DIRECTORY_SEPARATOR . 'cacert.pem';
  535. $file2 = __DIR__ . DIRECTORY_SEPARATOR . 'cert' . DIRECTORY_SEPARATOR . 'cacert-initial.pem';
  536. $useCert = (file_exists($file)) ? $file : $file2;
  537. $context = stream_context_create(
  538. array(
  539. 'ssl' => array(
  540. 'verify_peer' => true,
  541. 'cafile' => $useCert
  542. )
  543. )
  544. );
  545. if (!file_exists($file)) {
  546. file_put_contents($file, fopen($url, 'r', false, $context));
  547. } elseif (file_exists($file) && time() - 2592000 > filemtime($file)) {
  548. file_put_contents($file, fopen($url, 'r', false, $context));
  549. }
  550. return $file;
  551. }
  552. // Leave for deluge class
  553. function localURL($url, $force = false)
  554. {
  555. if ($force) {
  556. return true;
  557. }
  558. if (strpos($url, 'https') !== false) {
  559. preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $url, $result);
  560. $result = (!empty($result) ? true : false);
  561. return $result;
  562. }
  563. return false;
  564. }
  565. // Maybe use later?
  566. function curl($curl, $url, $headers = array(), $data = array())
  567. {
  568. // Initiate cURL
  569. $curlReq = curl_init($url);
  570. if (in_array(trim(strtoupper($curl)), ["GET", "POST", "PUT", "DELETE"])) {
  571. curl_setopt($curlReq, CURLOPT_CUSTOMREQUEST, trim(strtoupper($curl)));
  572. } else {
  573. return null;
  574. }
  575. curl_setopt($curlReq, CURLOPT_RETURNTRANSFER, true);
  576. curl_setopt($curlReq, CURLOPT_CAINFO, getCert());
  577. curl_setopt($curlReq, CURLOPT_CONNECTTIMEOUT, 5);
  578. if (localURL($url)) {
  579. curl_setopt($curlReq, CURLOPT_SSL_VERIFYHOST, 0);
  580. curl_setopt($curlReq, CURLOPT_SSL_VERIFYPEER, 0);
  581. }
  582. // Format Headers
  583. $cHeaders = array();
  584. foreach ($headers as $k => $v) {
  585. $cHeaders[] = $k . ': ' . $v;
  586. }
  587. if (count($cHeaders)) {
  588. curl_setopt($curlReq, CURLOPT_HTTPHEADER, $cHeaders);
  589. }
  590. // Format Data
  591. switch (isset($headers['Content-Type']) ? $headers['Content-Type'] : '') {
  592. case 'application/json':
  593. curl_setopt($curlReq, CURLOPT_POSTFIELDS, json_encode($data));
  594. break;
  595. case 'application/x-www-form-urlencoded':
  596. curl_setopt($curlReq, CURLOPT_POSTFIELDS, http_build_query($data));
  597. break;
  598. default:
  599. $headers['Content-Type'] = 'application/x-www-form-urlencoded';
  600. curl_setopt($curlReq, CURLOPT_POSTFIELDS, http_build_query($data));
  601. }
  602. // Execute
  603. $result = curl_exec($curlReq);
  604. $httpcode = curl_getinfo($curlReq);
  605. // Close
  606. curl_close($curlReq);
  607. // Return
  608. return array('content' => $result, 'http_code' => $httpcode);
  609. }
  610. // Maybe use later?
  611. function getHeaders($url)
  612. {
  613. $ch = curl_init($url);
  614. curl_setopt($ch, CURLOPT_NOBODY, true);
  615. curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  616. curl_setopt($ch, CURLOPT_HEADER, false);
  617. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  618. curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
  619. curl_setopt($ch, CURLOPT_CAINFO, getCert());
  620. if (localURL($url)) {
  621. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  622. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  623. }
  624. curl_exec($ch);
  625. $headers = curl_getinfo($ch);
  626. curl_close($ch);
  627. return $headers;
  628. }
  629. // Maybe use later?
  630. function download($url, $path)
  631. {
  632. ini_set('max_execution_time', 0);
  633. set_time_limit(0);
  634. $ch = curl_init($url);
  635. curl_setopt($ch, CURLOPT_HEADER, 1);
  636. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  637. curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
  638. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  639. curl_setopt($ch, CURLOPT_CAINFO, getCert());
  640. if (localURL($url)) {
  641. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  642. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  643. }
  644. $raw_file_data = curl_exec($ch);
  645. curl_close($ch);
  646. file_put_contents($path, $raw_file_data);
  647. return (filesize($path) > 0) ? true : false;
  648. }
  649. // swagger
  650. function getServerPath($over = false)
  651. {
  652. if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") {
  653. $protocol = "https://";
  654. } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
  655. $protocol = "https://";
  656. } else {
  657. $protocol = "http://";
  658. }
  659. $domain = '';
  660. if (isset($_SERVER['SERVER_NAME']) && strpos($_SERVER['SERVER_NAME'], '.') !== false) {
  661. $domain = $_SERVER['SERVER_NAME'];
  662. } elseif (isset($_SERVER['HTTP_HOST'])) {
  663. if (strpos($_SERVER['HTTP_HOST'], ':') !== false) {
  664. $domain = explode(':', $_SERVER['HTTP_HOST'])[0];
  665. $port = explode(':', $_SERVER['HTTP_HOST'])[1];
  666. if ($port !== "80" && $port !== "443") {
  667. $domain = $_SERVER['HTTP_HOST'];
  668. }
  669. } else {
  670. $domain = $_SERVER['HTTP_HOST'];
  671. }
  672. }
  673. $url = $protocol . $domain . str_replace("\\", "/", dirname($_SERVER['REQUEST_URI']));
  674. if (strpos($url, '/api') !== false) {
  675. $url = explode('/api', $url);
  676. return $url[0] . '/';
  677. } else {
  678. return $url;
  679. }
  680. }
  681. // used for api return
  682. function safe_json_encode($value, $options = 0, $depth = 512)
  683. {
  684. $encoded = json_encode($value, $options, $depth);
  685. if ($encoded === false && $value && json_last_error() == JSON_ERROR_UTF8) {
  686. $encoded = json_encode(utf8ize($value), $options, $depth);
  687. }
  688. return $encoded;
  689. }
  690. // used for api return
  691. function utf8ize($mixed)
  692. {
  693. if (is_array($mixed)) {
  694. foreach ($mixed as $key => $value) {
  695. $mixed[$key] = utf8ize($value);
  696. }
  697. } elseif (is_string($mixed)) {
  698. return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
  699. }
  700. return $mixed;
  701. }