Index: sapi/apache2handler/php_apache.h =================================================================== RCS file: /repository/php-src/sapi/apache2handler/php_apache.h,v retrieving revision 1.8.2.1 diff -u -p -d -r1.8.2.1 php_apache.h --- sapi/apache2handler/php_apache.h 1 Jan 2006 12:50:18 -0000 1.8.2.1 +++ sapi/apache2handler/php_apache.h 28 May 2006 17:13:03 -0000 @@ -44,6 +44,8 @@ typedef struct php_struct { #endif /* Whether or not we've processed PHP in the output filters yet. */ int request_processed; + /* final content type */ + char *content_type; } php_struct; void *merge_php_config(apr_pool_t *p, void *base_conf, void *new_conf); Index: sapi/apache2handler/sapi_apache2.c =================================================================== RCS file: /repository/php-src/sapi/apache2handler/sapi_apache2.c,v retrieving revision 1.57.2.10 diff -u -p -d -r1.57.2.10 sapi_apache2.c --- sapi/apache2handler/sapi_apache2.c 19 Mar 2006 14:54:53 -0000 1.57.2.10 +++ sapi/apache2handler/sapi_apache2.c 28 May 2006 17:13:03 -0000 @@ -105,8 +105,10 @@ php_apache_sapi_header_handler(sapi_head } while (*val == ' '); if (!strcasecmp(sapi_header->header, "content-type")) { - val = apr_pstrdup(ctx->r->pool, val); - ap_set_content_type(ctx->r, val); + if (ctx->content_type) { + efree(ctx->content_type); + } + ctx->content_type = estrdup(val); } else if (sapi_header->replace) { apr_table_set(ctx->r->headers_out, sapi_header->header, val); } else { @@ -131,6 +133,15 @@ php_apache_sapi_send_headers(sapi_header && sline[8] == ' ') { ctx->r->status_line = apr_pstrdup(ctx->r->pool, sline + 9); } + + /* call ap_set_content_type only once, else each time we call it, + configured output filters for that content type will be added */ + if (!ctx->content_type) { + ctx->content_type = sapi_get_default_content_type(TSRMLS_C); + } + ap_set_content_type(ctx->r, apr_pstrdup(ctx->r->pool, ctx->content_type)); + efree(ctx->content_type); + ctx->content_type = NULL; return SAPI_HEADER_SENT_SUCCESSFULLY; } @@ -418,10 +429,6 @@ static int php_apache_request_ctor(reque SG(request_info).path_translated = apr_pstrdup(r->pool, r->filename); r->no_local_copy = 1; - content_type = sapi_get_default_content_type(TSRMLS_C); - ap_set_content_type(r, apr_pstrdup(r->pool, content_type)); - efree(content_type); - content_length = (char *) apr_table_get(r->headers_in, "Content-Length"); SG(request_info).content_length = (content_length ? atoi(content_length) : 0);