# Patch for get_headers(

- Thread: https://externals.io/message/17815
- Original archive: https://news-web.php.net/php.internals/17815
- Started by Arnar Mar Sig on 2005-08-11T01:32:40+00:00
- Messages: 1
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #17815 — Arnar Mar Sig — 2005-08-11T01:32:40+00:00

URL: https://externals.io/message/17815#17815

This patch defines a new argument to get_headers. "header" to get a specified header and returns it as a string.

? get_headers.patch
Index: ext/standard/url.c
===================================================================
RCS file: /repository/php-src/ext/standard/url.c,v
retrieving revision 1.87
diff -u -r1.87 url.c
--- ext/standard/url.c	9 Aug 2005 14:17:28 -0000	1.87
+++ ext/standard/url.c	11 Aug 2005 01:26:31 -0000
@@ -662,8 +662,10 @@
 	zval **prev_val, **hdr = NULL;
 	HashPosition pos;
 	long format = 0;
+	char *header = NULL;
+	int header_len;
                 
-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &url, &url_len, &format) == FAILURE) {
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls", &url, &url_len, &format, &header, &header_len) == FAILURE) {
 		return;
 	}
 
@@ -671,40 +673,54 @@
 		RETURN_FALSE;
 	}
 
-	array_init(return_value);
+	if (header_len == 0) {
+		header = NULL;
+	}
+
+	if (header == NULL) {
+		array_init(return_value);
+	}
 
 	zend_hash_internal_pointer_reset_ex(HASH_OF(stream->wrapperdata), &pos);
 	while (zend_hash_get_current_data_ex(HASH_OF(stream->wrapperdata), (void**)&hdr, &pos) != FAILURE) {
-		if (!format) {
+		if (!format && header == NULL) {
 no_name_header:
 			add_next_index_stringl(return_value, Z_STRVAL_PP(hdr), Z_STRLEN_PP(hdr), 1);
 		} else {
-			char c;
 			char *s, *p;
 
 			if ((p = strchr(Z_STRVAL_PP(hdr), ':'))) {
-				c = *p;
 				*p = '\0';
 				s = p + 1;
 				while (isspace((int)*(unsigned char *)s)) {
 					s++;
 				}
 
-				if (zend_hash_find(HASH_OF(return_value), Z_STRVAL_PP(hdr), (p - Z_STRVAL_PP(hdr) + 1), (void **) &prev_val) == FAILURE) {
-					add_assoc_stringl_ex(return_value, Z_STRVAL_PP(hdr), (p - Z_STRVAL_PP(hdr) + 1), s, (Z_STRLEN_PP(hdr) - (s - Z_STRVAL_PP(hdr))), 1);
-				} else { /* some headers may occur more then once, therefor we need to remake the string into an array */
-					convert_to_array(*prev_val);
-					add_next_index_stringl(*prev_val, s, (Z_STRLEN_PP(hdr) - (s - Z_STRVAL_PP(hdr))), 1);
+				if (header == NULL) {
+					if (zend_hash_find(HASH_OF(return_value), Z_STRVAL_PP(hdr), (p - Z_STRVAL_PP(hdr) + 1), (void **) &prev_val) == FAILURE) {
+						add_assoc_stringl_ex(return_value, Z_STRVAL_PP(hdr), (p - Z_STRVAL_PP(hdr) + 1), s, (Z_STRLEN_PP(hdr) - (s - Z_STRVAL_PP(hdr))), 1);
+					} else { /* some headers may occur more then once, therefor we need to remake the string into an array */
+						convert_to_array(*prev_val);
+						add_next_index_stringl(*prev_val, s, (Z_STRLEN_PP(hdr) - (s - Z_STRVAL_PP(hdr))), 1);
+					}
+				} else {
+					if (!strncmp(header, Z_STRVAL_PP(hdr), header_len)) {
+						RETVAL_STRING(s,1);
+						goto done;
+					}
 				}
-
-				*p = c;
-			} else {
+			} else if (header == NULL) {
 				goto no_name_header;
 			}
 		}
 		zend_hash_move_forward_ex(HASH_OF(stream->wrapperdata), &pos);
 	}
+	if (header != NULL) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Header \"%s\" not found.", header);
+		RETVAL_FALSE;
+	}
 
+done:
 	php_stream_close(stream);
 }
 /* }}} */
