Skip to content
← Back to Snippets
Code

Get All HTTP Request Headers

Reads HTTP request headers from getallheaders() when available or from server variables using explicit HTTP header key conversion.

Purpose

Reads HTTP request headers from getallheaders() when available or from server variables using explicit HTTP header key conversion.

Snippet details

ContextHttpLevelPracticalCopy-and-paste statusMarked safe after review.

Categories

  • Security

Code

<?php

/*
 * Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
 * Free for personal and internal use. Paid project use requires visible credit
 * to Jeffery L. Paris. Corporate use requires a paid license fee unless a
 * separate written license states otherwise.
 */

/**
 * Get All HTTP Request Headers.
 *
 * Purpose:
 * Returns request headers in a readable associative array while supporting
 * environments where getallheaders() is unavailable.
 *
 * @param array $server_values Optional server values for tests or CLI examples.
 * @return array Header name to header value map.
 */
function ogSnippetGetAllRequestHeaders(array $server_values = array()): array {
	$headers = array();

	if (count($server_values) === 0 && function_exists('getallheaders') === true) {
		$native_headers = getallheaders();

		foreach ($native_headers as $header_name => $header_value) {
			$header_name = trim((string) $header_name);
			$header_value = trim((string) $header_value);

			if ($header_name !== '') {
				$headers[$header_name] = $header_value;
			}
		}

		return $headers;
	}

	if (count($server_values) === 0) {
		$server_values = $_SERVER;
	}

	foreach ($server_values as $server_key => $server_value) {
		$server_key = (string) $server_key;

		if (strpos($server_key, 'HTTP_') === 0) {
			$header_name = substr($server_key, 5);
			$header_name = strtolower($header_name);
			$header_name = str_replace('_', ' ', $header_name);
			$header_name = ucwords($header_name);
			$header_name = str_replace(' ', '-', $header_name);
			$headers[$header_name] = trim((string) $server_value);
		}
	}

	return $headers;
}

$sample_headers = ogSnippetGetAllRequestHeaders(array(
	'HTTP_USER_AGENT' => 'Nostromo terminal',
	'HTTP_ACCEPT' => 'application/json',
	'SERVER_NAME' => 'phpog.local'
));

foreach ($sample_headers as $header_name => $header_value) {
	echo $header_name.': '.$header_value."\n";
}