1. <?php
  2. /**
  3. * Diagnostics script to surface HTTP header errors with a timeout.
  4. *
  5. * @param int $timeout Timeout in seconds.
  6. * @return void
  7. */
  8. function diagnoseHeaders(int $timeout = 5): void
  9. {
  10. $startTime = time();
  11. $errors = [];
  12. $headers = get_headers();
  13. if ($headers === false) {
  14. $errors[] = "Failed to retrieve headers.";
  15. } else {
  16. foreach ($headers as $header) {
  17. if (strpos($header, ': ') !== false) { // Check if it's a header line
  18. list($name, $value) = explode(': ', $header, 2); // Split into name and value
  19. // Basic error checks - expand as needed
  20. if (empty($name)) {
  21. $errors[] = "Invalid header name: " . $name;
  22. } elseif (empty($value)) {
  23. $errors[] = "Empty header value: " . $name;
  24. }
  25. }
  26. }
  27. }
  28. $endTime = time();
  29. $duration = $endTime - $startTime;
  30. if ($duration > $timeout) {
  31. $errors[] = "Timeout exceeded: " . $duration . " seconds.";
  32. }
  33. if (!empty($errors)) {
  34. echo "Header Diagnostics:\n";
  35. foreach ($errors as $error) {
  36. echo "- " . $error . "\n";
  37. }
  38. } else {
  39. echo "No header errors found.\n";
  40. }
  41. }
  42. //Example usage:
  43. diagnoseHeaders(10); //Run with a 10 second timeout
  44. ?>

Add your comment