-
Notifications
You must be signed in to change notification settings - Fork 1
/
functions.inc.php
105 lines (91 loc) · 3.44 KB
/
functions.inc.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
/**
* Copyright (c) 2021 David Ramsden
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
/**
* Fetches a URL using a proxy.
* Contents are cached on disk and subsequent requests for the same URL will be served from cache.
* Cache expires after 24 hours.
*
* @param string $url The URL to fetch.
* @return text The content of the URL.
*/
function fetch_url($url) {
// Cache file is SHA1 hash of URL.
$cache_file = 'cache/' . sha1($url);
// If cache file exists...
if (file_exists($cache_file)) {
// ...and cache file is less than 24 hours old,
// return the contents of the cache file.
if (time() - filemtime($cache_file) <= (24 * 60 * 60)) {
return file_get_contents($cache_file);
}
}
// Use cURL to fetch URL.
$ch = curl_init();
// Uncomment the following options to use a proxy when making requests.
//curl_setopt($ch, CURLOPT_PROXY, 'http://gateway.zscloud.net');
//curl_setopt($ch, CURLOPT_PROXYPORT, '80');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Ignore certificate errors.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Follow redirects.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$content = curl_exec($ch);
// On an error, return HTTP Status 404.
if (curl_errno($ch) || !strlen($content)) {
if (curl_errno($ch)) {
error_log("cURL request failed: " . curl_error($ch));
} elseif (!strlen($content)) {
error_log("cURL request failed: no content returned after request.");
}
curl_close($ch);
http_response_code(404);
exit();
}
curl_close($ch);
@file_put_contents($cache_file, $content, LOCK_EX);
return $content;
}
/**
* Generates a valid GUID.
*
* @param bool $rnd If not specified/not true, return a static GUID otherwise generate a random GUID.
* @return text The GUID.
*/
function generate_guid($rnd = false) {
if (empty($rnd)) {
return 'b3911430-1eeb-4685-8692-3626b1d44b8f';
}
return strtolower(sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)));
}
/**
* Validates the given string is a valid IPv4 address.
* Removes any whitespace.
*
* @param string $ip The IPv4 address to validate.
* @return text/bool Returns the IPv4 address, less any whitespace, if valid or if not returns false.
*/
function validate_ipv4($ip = "") {
$ip = preg_replace('/[ ]/', '', $ip);
if (empty($ip) || !preg_match('/^\d+\.\d+\.\d+\.\d+/', $ip)) {
return false;
}
return $ip;
}
?>