sterling Sat Sep 7 11:45:29 2002 EDT Modified files: /php4/ext/standard basic_functions.h file.c http_fopen_wrapper.c Log: @ Made the User-Agent that php's fopen wrappers send, configurable via @ php.ini or via a stream context. (Sterling) The stream context is untested, but it should/could work :) Either way it doesn't make the rest of the code bad. Wez -- please take a looksie for me :) Index: php4/ext/standard/basic_functions.h diff -u php4/ext/standard/basic_functions.h:1.105 php4/ext/standard/basic_functions.h:1.106 --- php4/ext/standard/basic_functions.h:1.105 Sat Mar 23 18:03:04 2002 +++ php4/ext/standard/basic_functions.h Sat Sep 7 11:45:29 2002 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.h,v 1.105 2002/03/23 23:03:04 derick Exp $ */ +/* $Id: basic_functions.h,v 1.106 2002/09/07 15:45:29 sterling Exp $ */ #ifndef BASIC_FUNCTIONS_H #define BASIC_FUNCTIONS_H @@ -141,7 +141,10 @@ HashTable sm_protected_env_vars; char *sm_allowed_env_vars; - + + /* file.c */ + char *user_agent; + /* pageinfo.c */ long page_uid; long page_gid; Index: php4/ext/standard/file.c diff -u php4/ext/standard/file.c:1.251 php4/ext/standard/file.c:1.252 --- php4/ext/standard/file.c:1.251 Thu Sep 5 10:21:55 2002 +++ php4/ext/standard/file.c Sat Sep 7 11:45:29 2002 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: file.c,v 1.251 2002/09/05 14:21:55 hyanantha Exp $ */ +/* $Id: file.c,v 1.252 2002/09/07 15:45:29 sterling Exp $ */ /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */ @@ -34,6 +34,7 @@ #include "ext/standard/php_filestat.h" #include "php_open_temporary_file.h" #include "ext/standard/basic_functions.h" +#include "php_ini.h" #include <stdio.h> #include <stdlib.h> @@ -155,6 +156,10 @@ } +PHP_INI_BEGIN() + STD_PHP_INI_ENTRY("user_agent", NULL, PHP_INI_ALL, OnUpdateString, user_agent, +php_basic_globals, basic_globals) +PHP_INI_END() + PHP_MINIT_FUNCTION(file) { le_stream = zend_register_list_destructors_ex(_file_stream_dtor, NULL, "stream", module_number); @@ -166,6 +171,8 @@ file_globals_ctor(&file_globals TSRMLS_CC); #endif + REGISTER_INI_ENTRIES(); + REGISTER_LONG_CONSTANT("SEEK_SET", SEEK_SET, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SEEK_CUR", SEEK_CUR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SEEK_END", SEEK_END, CONST_CS | CONST_PERSISTENT); Index: php4/ext/standard/http_fopen_wrapper.c diff -u php4/ext/standard/http_fopen_wrapper.c:1.42 php4/ext/standard/http_fopen_wrapper.c:1.43 --- php4/ext/standard/http_fopen_wrapper.c:1.42 Sat Sep 7 03:13:43 2002 +++ php4/ext/standard/http_fopen_wrapper.c Sat Sep 7 11:45:29 2002 @@ -18,7 +18,7 @@ | Wez Furlong <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: http_fopen_wrapper.c,v 1.42 2002/09/07 07:13:43 iliaa Exp $ */ +/* $Id: http_fopen_wrapper.c,v 1.43 2002/09/07 15:45:29 sterling Exp $ */ #include "php.h" #include "php_globals.h" @@ -88,6 +88,8 @@ int use_ssl; char *scratch = NULL; char *tmp = NULL; + char *ua_str = NULL; + zval **ua_zval; int scratch_len = 0; int body = 0; char location[HTTP_HEADER_BLOCK_SIZE]; @@ -196,7 +198,34 @@ else if (snprintf(scratch, scratch_len, "Host: %s\r\n", resource->host) > 0) php_stream_write(stream, scratch, strlen(scratch)); - php_stream_write_string(stream, "User-Agent: PHP/" PHP_VERSION "\r\n\r\n"); + if (context && + php_stream_context_get_option(context, "http", "user_agent", (zval **) +&ua_zval) == FAILURE && + php_stream_context_get_option(context, "https", "user_agent", (zval +**) &ua_zval) == FAILURE) { + ua_str = Z_STRVAL_PP(ua_zval); + } else if (BG(user_agent)) { + ua_str = BG(user_agent); + } + + if (ua_str) { +#define _UA_HEADER "User-Agent: %s\r\n" + char *ua; + size_t ua_len; + + ua_len = sizeof(_UA_HEADER) + strlen(ua_str); + ua = emalloc(ua_len + 1); + if ((ua_len = snprintf(ua, ua_len, _UA_HEADER, ua_str)) > 0) { + ua[ua_len] = 0; + php_stream_write(stream, ua, ua_len); + } else { + php_error(E_WARNING, "Cannot construct User-agent header"); + } + + if (ua) { + efree(ua); + } + } + + php_stream_write_string(stream, "\r\n"); location[0] = '\0'; @@ -241,66 +270,64 @@ } } - if( reqok ) { - /* read past HTTP headers */ + /* read past HTTP headers */ - http_header_line = emalloc(HTTP_HEADER_BLOCK_SIZE); + http_header_line = emalloc(HTTP_HEADER_BLOCK_SIZE); - while (!body && !php_stream_eof(stream)) { + while (!body && !php_stream_eof(stream)) { - if (php_stream_gets(stream, http_header_line, HTTP_HEADER_BLOCK_SIZE-1) != NULL) { - char *p; - int found_eol = 0; - int http_header_line_length; + if (php_stream_gets(stream, http_header_line, +HTTP_HEADER_BLOCK_SIZE-1) != NULL) { + char *p; + int found_eol = 0; + int http_header_line_length; - http_header_line[HTTP_HEADER_BLOCK_SIZE-1] = '\0'; - p = http_header_line; - while(*p) { - while(*p == '\n' || *p == '\r') { - *p = '\0'; - p--; - found_eol = 1; - } - if (found_eol) - break; - p++; + http_header_line[HTTP_HEADER_BLOCK_SIZE-1] = '\0'; + p = http_header_line; + while(*p) { + while(*p == '\n' || *p == '\r') { + *p = '\0'; + p--; + found_eol = 1; } - http_header_line_length = p-http_header_line+1; + if (found_eol) + break; + p++; + } + http_header_line_length = p-http_header_line+1; - if (!strncasecmp(http_header_line, "Location: ", 10)) { - strlcpy(location, http_header_line + 10, sizeof(location)); - } else if (!strncasecmp(http_header_line, "Content-Type: ", 14)) { - php_stream_notify_info(context, PHP_STREAM_NOTIFY_MIME_TYPE_IS, http_header_line + 14, 0); - } else if (!strncasecmp(http_header_line, "Content-Length: ", 16)) { - file_size = atoi(http_header_line + 16); - php_stream_notify_file_size(context, file_size, http_header_line, 0); - } + if (!strncasecmp(http_header_line, "Location: ", 10)) { + strlcpy(location, http_header_line + 10, +sizeof(location)); + } else if (!strncasecmp(http_header_line, "Content-Type: ", +14)) { + php_stream_notify_info(context, +PHP_STREAM_NOTIFY_MIME_TYPE_IS, http_header_line + 14, 0); + } else if (!strncasecmp(http_header_line, "Content-Length: ", +16)) { + file_size = atoi(http_header_line + 16); + php_stream_notify_file_size(context, file_size, +http_header_line, 0); + } - if (http_header_line[0] == '\0') - body = 1; - else { - zval *http_header; - MAKE_STD_ZVAL(http_header); + if (http_header_line[0] == '\0') + body = 1; + else { + zval *http_header; - ZVAL_STRINGL(http_header, http_header_line, http_header_line_length, 1); + MAKE_STD_ZVAL(http_header); + + ZVAL_STRINGL(http_header, http_header_line, +http_header_line_length, 1); - zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_header, sizeof(zval *), NULL); - } + +zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_header, sizeof(zval +*), NULL); } - else - break; } - } - - if (!reqok) { + else + break; + } + + if (!reqok) { + if (location[0] != '\0') php_stream_notify_info(context, PHP_STREAM_NOTIFY_REDIRECTED, location, 0); php_stream_close(stream); stream = NULL; - zval_dtor(response_header); - FREE_ZVAL(response_header); if (location[0] != '\0') {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php