1. <?php
  2. /**
  3. * Resolves response header dependencies, handling edge cases.
  4. *
  5. * @param array $dependencies An associative array where keys are header names and values are arrays of dependencies.
  6. * Each inner array contains header names that must be set before the outer header.
  7. * @param array $responseHeaders The existing response headers.
  8. * @return array The resolved response headers.
  9. */
  10. function resolveResponseHeaders(array $dependencies, array $responseHeaders): array
  11. {
  12. $resolvedHeaders = $responseHeaders;
  13. // Iterate through dependencies and resolve them.
  14. foreach ($dependencies as $headerName => $dependenciesArray) {
  15. // Check if the header already exists.
  16. if (isset($resolvedHeaders[$headerName])) {
  17. continue; // Skip if already set
  18. }
  19. $canSetHeader = true;
  20. // Check if all dependencies are set.
  21. foreach ($dependenciesArray as $dependencyName) {
  22. if (!isset($resolvedHeaders[$dependencyName])) {
  23. $canSetHeader = false;
  24. break; // Dependency missing, cannot set the header.
  25. }
  26. }
  27. // Set the header if all dependencies are met.
  28. if ($canSetHeader) {
  29. $resolvedHeaders[$headerName] = 'value'; //Set a default value. Modify as needed.
  30. } else {
  31. // Log a warning or handle the missing dependency as needed.
  32. error_log("Missing dependency for header: " . $headerName);
  33. }
  34. }
  35. return $resolvedHeaders;
  36. }
  37. //Example Usage (testing)
  38. if (PHP_SAPI != 'cli') { // Prevent output in CLI
  39. $dependencies = [
  40. 'X-Custom-Header' => ['X-Required-Header', 'Another-Required-Header'],
  41. 'Content-Type' => ['X-Content-Encoding'],
  42. 'Authorization' => [],
  43. ];
  44. $responseHeaders = [
  45. 'X-Required-Header' => 'someValue',
  46. 'Another-Required-Header' => 'anotherValue',
  47. 'X-Content-Encoding' => 'gzip'
  48. ];
  49. $resolvedHeaders = resolveResponseHeaders($dependencies, $responseHeaders);
  50. print_r($resolvedHeaders);
  51. }
  52. ?>

Add your comment