Does this take into account the fact that default_charset is
considered deprecated when unicode_semantics=on?
-Andrei
On Aug 12, 2005, at 2:46 PM, Antony Dovgal wrote:
tony2001 Fri Aug 12 17:46:16 2005 EDT
Modified files:
/php-src/main main.c
Log:
allow default_charset & default_mimetype to be changed during
runtime
http://cvs.php.net/diff.php/php-src/main/main.c?r1=1.641&r2=1.642&ty=u
Index: php-src/main/main.c
diff -u php-src/main/main.c:1.641 php-src/main/main.c:1.642
--- php-src/main/main.c:1.641 Thu Aug 11 19:36:02 2005
+++ php-src/main/main.c Fri Aug 12 17:46:14 2005
@@ -18,7 +18,7 @@
+---------------------------------------------------------------------
-+
*/
-/* $Id: main.c,v 1.641 2005/08/11 23:36:02 andrei Exp $ */
+/* $Id: main.c,v 1.642 2005/08/12 21:46:14 tony2001 Exp $ */
/* {{{ includes
*/
@@ -231,6 +231,99 @@
}
/* }}} */
+#define PHP_INI_OPTION_HEADERS_SENT
(option_name)
\
+ if (SG(headers_sent))
{
\
+ char *output_start_filename =
php_get_output_start_filename
(TSRMLS_C);
\
+ int output_start_lineno = php_get_output_start_lineno
(TSRMLS_C);
\
+ if (output_start_filename)
{
\
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Option " #option_name " cannot be changed after headers have been
sent (output started at %s:%d)", \
+
output_start_filename,
output_start_lineno); \
+ } else
{
\
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Option " #option_name " cannot be changed after headers have been
sent"); \
+ }
\
+ return
FAILURE;
\
+ }
+
+/* {{{ PHP_INI_MH
+ */
+static PHP_INI_MH(OnUpdateDefaultCharset)
+{
+ if (stage == PHP_INI_STAGE_RUNTIME && !SG
(request_info).no_headers) {
+ sapi_header_line ctr = {0};
+ int mimetype_len;
+
+ PHP_INI_OPTION_HEADERS_SENT(default_charset)
+
+ mimetype_len = SG(default_mimetype) ? strlen(SG
(default_mimetype)) : 0;
+
+ if (new_value_length) {
+ ctr.line = emalloc( sizeof("Content-type: ")-1 +
mimetype_len + sizeof("; charset=")-1 + new_value_length + 1);
+
+ memcpy(ctr.line, "Content-type: ", sizeof("Content-
type: "));
+ memcpy(ctr.line + sizeof("Content-type: ")-1, SG
(default_mimetype), mimetype_len);
+ memcpy(ctr.line + sizeof("Content-type: ")-1 +
mimetype_len, "; charset=", sizeof("; charset="));
+ memcpy(ctr.line + sizeof("Content-type: ")-1 +
mimetype_len + sizeof("; charset=")-1, new_value, new_value_length);
+
+ ctr.line_len = sizeof("Content-type: ")-1 +
mimetype_len + sizeof("; charset=")-1 + new_value_length;
+ } else {
+ ctr.line = emalloc( sizeof("Content-type: ")-1 +
mimetype_len + 1);
+
+ memcpy(ctr.line, "Content-type: ", sizeof("Content-
type: "));
+ memcpy(ctr.line + sizeof("Content-type: ")-1, SG
(default_mimetype), mimetype_len);
+
+ ctr.line_len = sizeof("Content-type: ")-1 + mimetype_len;
+ }
+ ctr.line[ctr.line_len] = 0;
+
+ sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
+ efree(ctr.line);
+ }
+
+ OnUpdateString(entry, new_value, new_value_length, mh_arg1,
mh_arg2, mh_arg3, stage TSRMLS_CC);
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ PHP_INI_MH
+ */
+static PHP_INI_MH(OnUpdateDefaultMimetype)
+{
+ if (stage == PHP_INI_STAGE_RUNTIME && !SG
(request_info).no_headers) {
+ sapi_header_line ctr = {0};
+ int charset_len;
+
+ PHP_INI_OPTION_HEADERS_SENT(default_mimetype)
+
+ charset_len = SG(default_charset) ? strlen(SG
(default_charset)) : 0;
+
+ if (charset_len) {
+ ctr.line = emalloc( sizeof("Content-type: ")-1 +
new_value_length + sizeof("; charset=")-1 + charset_len + 1);
+
+ memcpy(ctr.line, "Content-type: ", sizeof("Content-
type: "));
+ memcpy(ctr.line + sizeof("Content-type: ")-1,
new_value, new_value_length);
+ memcpy(ctr.line + sizeof("Content-type: ")-1 +
new_value_length, "; charset=", sizeof("; charset="));
+ memcpy(ctr.line + sizeof("Content-type: ")-1 +
new_value_length + sizeof("; charset=")-1, SG(default_charset),
charset_len);
+
+ ctr.line_len = sizeof("Content-type: ")-1 +
new_value_length + sizeof("; charset=")-1 + new_value_length;
+ } else {
+ ctr.line = emalloc( sizeof("Content-type: ")-1 +
new_value_length + 1);
+
+ memcpy(ctr.line, "Content-type: ", sizeof("Content-
type: "));
+ memcpy(ctr.line + sizeof("Content-type: ")-1,
new_value, new_value_length);
+
+ ctr.line_len = sizeof("Content-type: ")-1 +
new_value_length;
+ }
+ ctr.line[ctr.line_len] = 0;
+
+ sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
+ efree(ctr.line);
+ }
+
+ OnUpdateString(entry, new_value, new_value_length, mh_arg1,
mh_arg2, mh_arg3, stage TSRMLS_CC);
+ return SUCCESS;
+}
+/* }}} */
+
/* Need to convert to strings and make use of:
* PHP_SAFE_MODE
*
@@ -311,8 +404,8 @@
STD_PHP_INI_ENTRY("auto_append_file", NULL,
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateString,
auto_append_file, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("auto_prepend_file", NULL,
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateString,
auto_prepend_file, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("doc_root", NULL,
PHP_INI_SYSTEM, OnUpdateStringUnempty,
doc_root, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("default_charset",
SAPI_DEFAULT_CHARSET, PHP_INI_ALL, OnUpdateString,
default_charset, sapi_globals_struct,sapi_globals)
- STD_PHP_INI_ENTRY("default_mimetype",
SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL,
OnUpdateString, default_mimetype,
sapi_globals_struct,sapi_globals)
+ STD_PHP_INI_ENTRY("default_charset",
SAPI_DEFAULT_CHARSET, PHP_INI_ALL,
OnUpdateDefaultCharset, default_charset,
sapi_globals_struct,sapi_globals)
+ STD_PHP_INI_ENTRY("default_mimetype",
SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL,
OnUpdateDefaultMimetype, default_mimetype,
sapi_globals_struct,sapi_globals)
ZEND_INI_ENTRY("unicode.output_encoding", NULL, ZEND_INI_ALL,
OnUpdateOutputEncoding)
STD_PHP_INI_ENTRY("error_log", NULL,
PHP_INI_ALL, OnUpdateString,
error_log, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("extension_dir",
PHP_EXTENSION_DIR, PHP_INI_SYSTEM,
OnUpdateStringUnempty, extension_dir,
php_core_globals, core_globals)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php