Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:17815 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 88770 invoked by uid 1010); 11 Aug 2005 01:45:29 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 88738 invoked from network); 11 Aug 2005 01:45:29 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Aug 2005 01:45:29 -0000 Received: from ([127.0.0.1:14828]) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with ECSTREAM id 22/92-24081-9BDAAF24 for ; Wed, 10 Aug 2005 21:45:29 -0400 X-Host-Fingerprint: 212.30.222.207 adsl6-207.simnet.is Received: from ([212.30.222.207:12751] helo=localhost.localdomain) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id E8/52-24081-F3AAAF24 for ; Wed, 10 Aug 2005 21:30:39 -0400 Message-ID: To: internals@lists.php.net Date: Thu, 11 Aug 2005 01:32:40 +0000 User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716) X-Accept-Language: en-us, en MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Posted-By: 212.30.222.207 Subject: Patch for get_headers( From: arnar@8.is (Arnar Mar Sig) 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); } /* }}} */