1. <?php
  2. /**
  3. * Loads request headers for hypothesis validation, with error logging.
  4. *
  5. * @param array $headers The request headers array.
  6. * @param array $requiredHeaders An array of required header names.
  7. * @param array $allowedValues An array of allowed values for specific headers (optional).
  8. * @param string $logFile The file to log errors to.
  9. * @return array|false An array of validated headers, or false on failure.
  10. */
  11. function validateRequestHeaders(array $headers, array $requiredHeaders, array $allowedValues = [], string $logFile = 'header_validation.log'): array|false
  12. {
  13. $validatedHeaders = [];
  14. $errors = [];
  15. // Log function
  16. function logError(string $message) use ($logFile) {
  17. error_log($message, 3, $logFile); // Log to file
  18. }
  19. // Check required headers
  20. foreach ($requiredHeaders as $headerName) {
  21. if (!isset($headers[$headerName])) {
  22. logError("Missing required header: " . $headerName);
  23. $errors[] = "Missing required header: " . $headerName;
  24. } else {
  25. $validatedHeaders[$headerName] = $headers[$headerName];
  26. }
  27. }
  28. // Check allowed values for specific headers
  29. if (!empty($allowedValues)) {
  30. foreach ($allowedValues as $headerName => $allowedValuesArray) {
  31. if (isset($headers[$headerName])) {
  32. if (!in_array($headers[$headerName], $allowedValuesArray)) {
  33. logError("Invalid value for header: " . $headerName . ". Allowed values: " . implode(", ", $allowedValuesArray) . ", Received: " . $headers[$headerName]);
  34. $errors[] = "Invalid value for header: " . $headerName . ". Allowed values: " . implode(", ", $allowedValuesArray) . ", Received: " . $headers[$headerName];
  35. } else {
  36. $validatedHeaders[$headerName] = $headers[$headerName];
  37. }
  38. }
  39. }
  40. }
  41. if (!empty($errors)) {
  42. logError("Header validation failed: " . implode(", ", $errors));
  43. return false; // Return false if any errors occurred
  44. }
  45. return $validatedHeaders;
  46. }
  47. ?>

Add your comment