= 0 && $age <= $cacheTtlSeconds) { $serverStatus = $decoded['data']; } } } } if (!is_array($serverStatus)) { $serverStatus = build_server_status($serverStatusTargets); @file_put_contents($cacheFile, json_encode(['ts' => time(), 'data' => $serverStatus], JSON_UNESCAPED_SLASHES)); } // index by url + normalized url (trailing slash removed) $byUrl = []; $byUrlNormalized = []; foreach ($serverStatus as $svc) { if (!empty($svc['url']) && is_string($svc['url'])) { $u = $svc['url']; $byUrl[$u] = $svc; $byUrlNormalized[rtrim($u, '/')] = $svc; } } $json = json_encode([ 'ts' => time(), 'data' => $serverStatus, 'byUrl' => $byUrl, 'byUrlNormalized' => $byUrlNormalized, ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); if ($json === false) { http_response_code(500); $json = '{"error":"json_encode_failed"}'; } // Write as raw bytes to avoid any output-encoding conversion. fwrite(STDOUT, $json);