pajoye                                   Mon, 23 Aug 2010 16:54:57 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=302714

Log:
- add follow_location support for http stream, enabled by default to keep BC. 
Allows one to ignore the location header, w/o having to ignore errors or other 
tricks, the location data is however still available (meta)

Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/standard/http_fopen_wrapper.c
    U   php/php-src/trunk/ext/standard/http_fopen_wrapper.c

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2010-08-23 15:28:23 UTC (rev 302713)
+++ php/php-src/branches/PHP_5_3/NEWS   2010-08-23 16:54:57 UTC (rev 302714)
@@ -4,6 +4,8 @@
 - Upgraded bundled Sqlite3 to version 3.7.0.1. (Ilia)
 - Upgraded bundled PCRE to version 8.10. (Ilia)

+- Added follow_location (enabled by default) option for the http stream 
support.
+  (Pierre)
 - Added new character sets to mysqlnd, which are available in MySQL 5.5
   (Andrey)


Modified: php/php-src/branches/PHP_5_3/ext/standard/http_fopen_wrapper.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/http_fopen_wrapper.c      
2010-08-23 15:28:23 UTC (rev 302713)
+++ php/php-src/branches/PHP_5_3/ext/standard/http_fopen_wrapper.c      
2010-08-23 16:54:57 UTC (rev 302714)
@@ -111,6 +111,7 @@
        char *user_headers = NULL;
        int header_init = ((flags & HTTP_WRAPPER_HEADER_INIT) != 0);
        int redirected = ((flags & HTTP_WRAPPER_REDIRECTED) != 0);
+       int follow_location = 1;
        php_stream_filter *transfer_encoding = NULL;

        tmp_line[0] = '\0';
@@ -628,6 +629,11 @@
                        http_header_line[http_header_line_length] = '\0';

                        if (!strncasecmp(http_header_line, "Location: ", 10)) {
+                               if (context && 
php_stream_context_get_option(context, "http", "follow_location", &tmpzval) == 
SUCCESS) {
+                                       SEPARATE_ZVAL(tmpzval);
+                                       convert_to_long_ex(tmpzval);
+                                       follow_location = Z_LVAL_PP(tmpzval);
+                               }
                                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);
@@ -670,9 +676,9 @@
                        break;
                }
        }
-
-       if (!reqok || location[0] != '\0') {
-               if (((options & STREAM_ONLY_GET_HEADERS) || ignore_errors) && 
redirect_max <= 1) {
+
+       if (!reqok || (location[0] != '\0' && follow_location)) {
+               if (!follow_location && (((options & STREAM_ONLY_GET_HEADERS) 
|| ignore_errors) && redirect_max <= 1)) {
                        goto out;
                }


Modified: php/php-src/trunk/ext/standard/http_fopen_wrapper.c
===================================================================
--- php/php-src/trunk/ext/standard/http_fopen_wrapper.c 2010-08-23 15:28:23 UTC 
(rev 302713)
+++ php/php-src/trunk/ext/standard/http_fopen_wrapper.c 2010-08-23 16:54:57 UTC 
(rev 302714)
@@ -111,6 +111,7 @@
        char *user_headers = NULL;
        int header_init = ((flags & HTTP_WRAPPER_HEADER_INIT) != 0);
        int redirected = ((flags & HTTP_WRAPPER_REDIRECTED) != 0);
+       int follow_location = 1;
        php_stream_filter *transfer_encoding = NULL;

        tmp_line[0] = '\0';
@@ -628,6 +629,11 @@
                        http_header_line[http_header_line_length] = '\0';

                        if (!strncasecmp(http_header_line, "Location: ", 10)) {
+                               if (context && 
php_stream_context_get_option(context, "http", "follow_location", &tmpzval) == 
SUCCESS) {
+                                       SEPARATE_ZVAL(tmpzval);
+                                       convert_to_long_ex(tmpzval);
+                                       follow_location = Z_LVAL_PP(tmpzval);
+                               }
                                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);
@@ -670,9 +676,9 @@
                        break;
                }
        }
-
-       if (!reqok || location[0] != '\0') {
-               if (((options & STREAM_ONLY_GET_HEADERS) || ignore_errors) && 
redirect_max <= 1) {
+
+       if (!reqok || (location[0] != '\0' && follow_location)) {
+               if (!follow_location && (((options & STREAM_ONLY_GET_HEADERS) 
|| ignore_errors) && redirect_max <= 1)) {
                        goto out;
                }


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

Reply via email to