[PHP-CVS] cvs: php4 /ext/standard basic_functions.c url.c url.h /main streams.c

2003-02-07 Thread Ilia Alshanetsky
iliaa   Fri Feb  7 16:33:36 2003 EDT

  Modified files:  
/php4/main  streams.c 
/php4/ext/standard  url.c url.h basic_functions.c 
  Log:
  Added get_browser() function. This function can be used to fetch the headers
  sent by the server when a request is made for a given URL.
  
  
Index: php4/main/streams.c
diff -u php4/main/streams.c:1.143 php4/main/streams.c:1.144
--- php4/main/streams.c:1.143   Thu Jan 30 16:06:34 2003
+++ php4/main/streams.c Fri Feb  7 16:33:35 2003
@@ -20,7 +20,7 @@
+--+
  */
 
-/* $Id: streams.c,v 1.143 2003/01/30 21:06:34 sas Exp $ */
+/* $Id: streams.c,v 1.144 2003/02/07 21:33:35 iliaa Exp $ */
 
 #define _GNU_SOURCE
 #include php.h
@@ -2379,6 +2379,10 @@
path_to_open = path;
 
wrapper = php_stream_locate_url_wrapper(path, path_to_open, options 
TSRMLS_CC);
+   if (options  STREAM_USE_URL  (!wrapper || !wrapper-is_url)) {
+   php_error_docref(NULL TSRMLS_CC, E_WARNING, This function may only be 
+used against URLs.);
+   return NULL;
+   }
 
if (wrapper){
 
Index: php4/ext/standard/url.c
diff -u php4/ext/standard/url.c:1.62 php4/ext/standard/url.c:1.63
--- php4/ext/standard/url.c:1.62Tue Dec 31 11:07:56 2002
+++ php4/ext/standard/url.c Fri Feb  7 16:33:35 2003
@@ -15,7 +15,7 @@
| Author: Jim Winstead [EMAIL PROTECTED]  |
+--+
  */
-/* $Id: url.c,v 1.62 2002/12/31 16:07:56 sebastian Exp $ */
+/* $Id: url.c,v 1.63 2003/02/07 21:33:35 iliaa Exp $ */
 
 #include stdlib.h
 #include string.h
@@ -549,6 +549,63 @@
}
*dest = '\0';
return dest - str;
+}
+/* }}} */
+
+/* {{{ proto array get_headers(string url)
+   fetches all the headers sent by the server in response to a HTTP request */
+PHP_FUNCTION(get_headers)
+{
+   char *url, *url_len;
+   php_stream_context *context = NULL;
+   php_stream *stream;
+   zval **prev_val, **hdr = NULL;
+   HashPosition pos;
+   long format = 0;
+
+   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s|l, url, url_len, 
+format) == FAILURE) {
+   return;
+   }
+
+   if (!(stream = php_stream_open_wrapper_ex(url, r, REPORT_ERRORS | 
+STREAM_USE_URL | STREAM_ONLY_GET_HEADERS, NULL, context))) {
+   RETURN_FALSE;
+   }
+
+   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) {
+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(*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);
+   }
+
+   *p = c;
+   } else {
+   goto no_name_header;
+   }
+   }
+   zend_hash_move_forward_ex(HASH_OF(stream-wrapperdata), pos);
+   }
+
+   php_stream_close(stream);
 }
 /* }}} */
 
Index: php4/ext/standard/url.h
diff -u php4/ext/standard/url.h:1.14 php4/ext/standard/url.h:1.15
--- php4/ext/standard/url.h:1.14Tue Dec 31 11:07:56 2002
+++ php4/ext/standard/url.h Fri Feb  7 16:33:35 2003
@@ -15,7 +15,7 @@
| Author: Jim Winstead [EMAIL PROTECTED]  |
+--+
  */
-/* $Id: url.h,v 1.14 2002/12/31 16:07:56 sebastian Exp $ */
+/* $Id: url.h,v 1.15 2003/02/07 21:33:35 iliaa Exp $ */
 
 #ifndef URL_H
 #define URL_H
@@ -43,6 +43,7 @@
 PHP_FUNCTION(urldecode);
 PHP_FUNCTION(rawurlencode);
 PHP_FUNCTION(rawurldecode);
+PHP_FUNCTION(get_headers);
 
 #endif 

Re: [PHP-CVS] cvs: php4 /ext/standard basic_functions.c url.c url.h /main streams.c

2003-02-07 Thread Derick Rethans
On Fri, 7 Feb 2003, Ilia Alshanetsky wrote:

 iliaa Fri Feb  7 16:33:36 2003 EDT
 
   Modified files:  
 /php4/mainstreams.c 
 /php4/ext/standardurl.c url.h basic_functions.c 
   Log:
   Added get_browser() function. This function can be used to fetch the headers

s/get_browser/get_headers

Derick

-- 

-
 Derick Rethans http://derickrethans.nl/ 
 PHP Magazine - PHP Magazine for Professionals   http://php-mag.net/
-


-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php