[$p,'page'], $pages), array_map(fn($a)=>[$a,'api'], $apis)); $total = count($all); foreach($all as [$path,$type]) { $url = "https://weval-consulting.com/$path"; $ch = curl_init($url); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>1, CURLOPT_TIMEOUT=>8, CURLOPT_SSL_VERIFYPEER=>0, CURLOPT_FOLLOWLOCATION=>1, CURLOPT_NOBODY=>0]); $body = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $size = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD); curl_close($ch); $status = 'ok'; $detail = ''; if ($code >= 500) { $status = 'error'; $detail = "HTTP $code (server error)"; } elseif ($code == 404) { $status = 'missing'; $detail = "HTTP 404 (not found)"; } elseif ($code == 0) { $status = 'unreachable'; $detail = "Connection failed"; } elseif ($type === 'page' && $code == 200 && $size < 200) { $status = 'blank'; $detail = "Blank page ($size bytes)"; } elseif ($type === 'page' && $code == 200 && strpos($body, 'Error') !== false) { $status = 'error_page'; $detail = "Error page detected"; } elseif ($type === 'api' && $code == 200 && strpos($body, '$path, 'type'=>$type, 'status'=>$status, 'detail'=>$detail, 'code'=>$code, 'size'=>(int)$size]; $results[$path] = ['status'=>$status, 'code'=>$code, 'size'=>(int)$size]; } // Compare with last scan for regression detection $lastScan = @json_decode(@file_get_contents($SF), true); $regressions = []; if ($lastScan && !empty($lastScan['results'])) { foreach ($results as $path => $r) { $prev = $lastScan['results'][$path] ?? null; if ($prev && $prev['status'] === 'ok' && $r['status'] !== 'ok') { $regressions[] = "REGRESSION: $path was OK, now {$r['status']} (HTTP {$r['code']})"; } } } // Save $output = [ 'timestamp' => date('Y-m-d H:i:s'), 'total' => $total, 'ok' => $ok_count, 'issues_count' => count($issues), 'regressions_count' => count($regressions), 'issues' => $issues, 'regressions' => $regressions, 'results' => $results, 'pages_scanned' => count($pages), 'apis_scanned' => count($apis), ]; file_put_contents($SF, json_encode($output, JSON_PRETTY_PRINT)); // Email on regressions if (!empty($regressions)) { $body = "WEVIA REGRESSION DETECTED - " . date('Y-m-d H:i') . "\n\n"; foreach ($regressions as $r) $body .= "! $r\n"; $body .= "\nTotal: $ok_count/$total OK | " . count($issues) . " issues\n"; foreach ($issues as $i) $body .= " [{$i['status']}] {$i['path']}: {$i['detail']}\n"; @mail('ymahboub@weval-consulting.com', '[WEVIA REGRESSION] ' . count($regressions) . ' regressions detected', $body, "From: wevia@weval-consulting.com"); } lg("Scan: $ok_count/$total OK | " . count($issues) . " issues | " . count($regressions) . " regressions"); echo "$ts Scan: $ok_count/$total OK | " . count($issues) . " issues | " . count($regressions) . " regressions\n";