<?php
/**
* Loads request headers for hypothesis validation, with error logging.
*
* @param array $headers The request headers array.
* @param array $requiredHeaders An array of required header names.
* @param array $allowedValues An array of allowed values for specific headers (optional).
* @param string $logFile The file to log errors to.
* @return array|false An array of validated headers, or false on failure.
*/
function validateRequestHeaders(array $headers, array $requiredHeaders, array $allowedValues = [], string $logFile = 'header_validation.log'): array|false
{
$validatedHeaders = [];
$errors = [];
// Log function
function logError(string $message) use ($logFile) {
error_log($message, 3, $logFile); // Log to file
}
// Check required headers
foreach ($requiredHeaders as $headerName) {
if (!isset($headers[$headerName])) {
logError("Missing required header: " . $headerName);
$errors[] = "Missing required header: " . $headerName;
} else {
$validatedHeaders[$headerName] = $headers[$headerName];
}
}
// Check allowed values for specific headers
if (!empty($allowedValues)) {
foreach ($allowedValues as $headerName => $allowedValuesArray) {
if (isset($headers[$headerName])) {
if (!in_array($headers[$headerName], $allowedValuesArray)) {
logError("Invalid value for header: " . $headerName . ". Allowed values: " . implode(", ", $allowedValuesArray) . ", Received: " . $headers[$headerName]);
$errors[] = "Invalid value for header: " . $headerName . ". Allowed values: " . implode(", ", $allowedValuesArray) . ", Received: " . $headers[$headerName];
} else {
$validatedHeaders[$headerName] = $headers[$headerName];
}
}
}
}
if (!empty($errors)) {
logError("Header validation failed: " . implode(", ", $errors));
return false; // Return false if any errors occurred
}
return $validatedHeaders;
}
?>
Add your comment