frankenphp

This commit is contained in:
2026-01-15 04:32:49 +07:00
parent e4e1aa04ac
commit a21a62c483
9 changed files with 111 additions and 14 deletions

View File

@@ -21,3 +21,76 @@ if (!function_exists('getStoragePercent')) {
return $totalBytes > 0 ? ($categoryBytes / $totalBytes * 100) : 0;
}
}
if (!function_exists('getClientIp')) {
function getClientIp(): string
{
$server = $_SERVER;
$candidates = [
$server['HTTP_CF_CONNECTING_IP'] ?? null,
extractForwardedIp($server['HTTP_FORWARDED'] ?? null),
extractForwardedIp($server['HTTP_X_FORWARDED_FOR'] ?? null),
extractForwardedIp($server['HTTP_FORWARDED_FOR'] ?? null),
$server['HTTP_X_REAL_IP'] ?? null,
$server['HTTP_CLIENT_IP'] ?? null,
$server['REMOTE_ADDR'] ?? null,
];
foreach ($candidates as $ip) {
if ($ip === null) {
continue;
}
if ($valid = validateIp($ip)) {
return $valid;
}
}
return 'unknown';
}
}
if (!function_exists('extractForwardedIp')) {
function extractForwardedIp(?string $value): ?string
{
if (!$value) {
return null;
}
if (str_contains($value, 'for=')) {
if (preg_match('/for="?([^";, ]+)/i', $value, $m)) {
return $m[1];
}
}
$parts = explode(',', $value);
return trim($parts[0]) ?: null;
}
}
if (!function_exists('validateIp')) {
function validateIp(string $ip): ?string
{
$ip = trim($ip);
if ($ip === '') {
return null;
}
if (
str_contains($ip, ':') &&
!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)
) {
$ip = explode(':', $ip, 2)[0];
}
$flags = FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6;
return filter_var($ip, FILTER_VALIDATE_IP, $flags)
? $ip
: null;
}
}