cvs: /php4 php_ticks.c php_ticks.h /php4 .cvsignore Makefile.in SAPI.c SAPI.h configure.in main.c php.ini-dist php_globals.h php_version.h /php4/build
rules.mk rules_pear.mk /php4/ext/standard array.c /php4/sapi/apache mod_php4.c

From: Date: Fri, 25 Feb 2000 21:27:34 +0000
Subject: cvs: /php4 php_ticks.c php_ticks.h /php4 .cvsignore Makefile.in SAPI.c SAPI.h configure.in main.c php.ini-dist php_globals.h php_version.h /php4/build
rules.mk rules_pear.mk /php4/ext/standard array.c /php4/sapi/apache mod_php4.c
Groups: php.version4 
Request: Send a blank email to php-version4+get-11001@lists.php.net to get a copy of this message
ssb Fri Feb 25 13:27:34 2000 EDT Added files: /php4 php_ticks.c php_ticks.h Modified files: /php4 .cvsignore Makefile.in SAPI.c SAPI.h configure.in main.c php.ini-dist php_globals.h php_version.h /php4/build rules.mk rules_pear.mk /php4/ext/standard array.c /php4/sapi/apache mod_php4.c Log: @- Implemented default_charset and default_mimetype config directives (Stig) Implemented default_charset and default_mimetype configuration directives. Started implementing ticks in PHP. Index: php4/.cvsignore diff -u php4/.cvsignore:1.27 php4/.cvsignore:1.28 --- php4/.cvsignore:1.27 Wed Jan 12 11:09:59 2000 +++ php4/.cvsignore Fri Feb 25 13:27:02 2000 @@ -34,3 +34,5 @@ php-*.tar.gz want_dependencies .deps +Zend +TSRM Index: php4/Makefile.in diff -u php4/Makefile.in:1.74 php4/Makefile.in:1.75 --- php4/Makefile.in:1.74 Thu Feb 10 12:24:28 2000 +++ php4/Makefile.in Fri Feb 25 13:27:02 2000 @@ -8,13 +8,13 @@ SUBDIRS = Zend ext sapi $(TSRM_DIR) $(REGEX_DIR) . $(PEAR_DIR) LTLIBRARY_NAME = libphp4.la - + LTLIBRARY_SOURCES = \ main.c internal_functions.c snprintf.c php_sprintf.c \ configuration-parser.c configuration-scanner.c \ safe_mode.c fopen-wrappers.c php_realpath.c alloca.c \ php_ini.c SAPI.c rfc1867.c dlist.c php_content_types.c strlcpy.c \ - strlcat.c mergesort.c reentrancy.c php_variables.c + strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c LTLIBRARY_DEPENDENCIES = \ Zend/libZend.la \ @@ -35,7 +35,7 @@ targets = $(LTLIBRARY_NAME) $(PROGRAM_NAME) install_targets = install-local install-modules - + include $(topsrcdir)/build/rules.mk include $(topsrcdir)/build/library.mk include $(topsrcdir)/build/program.mk Index: php4/SAPI.c diff -u php4/SAPI.c:1.60 php4/SAPI.c:1.61 --- php4/SAPI.c:1.60 Fri Feb 25 02:10:43 2000 +++ php4/SAPI.c Fri Feb 25 13:27:02 2000 @@ -177,36 +177,65 @@ } +SAPI_API char *sapi_get_default_content_type(SLS_D) +{ + char *mimetype, *charset, *content_type; + + mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE; + charset = SG(default_charset) ? SG(default_charset) : SAPI_DEFAULT_CHARSET; + + if (strncasecmp(mimetype, "text/", 5) == 0 && strcasecmp(charset, "none") != 0) { + int len = strlen(mimetype) + sizeof(";charset=") + strlen(charset); + content_type = emalloc(len); + strlcpy(content_type, mimetype, len); + strlcat(content_type, ";charset=", len); + strlcat(content_type, charset, len); + } else { + content_type = estrdup(mimetype); + } + return content_type; +} + /* - * Called from php_request_startup() for every request. + * Add charset on content-type header if the MIME type starts with + * "text/", the default_charset directive is not set to "none" and + * there is not already a charset option in there. + * + * If "mimetype" is non-NULL, it should point to a pointer allocated + * with emalloc(). If a charset is added, the string will be + * re-allocated and the new length is returned. If mimetype is + * unchanged, 0 is returned. + * */ -SAPI_API void sapi_activate(SLS_D PLS_DC) +SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len SLS_DC) { - int len; + char *charset, *newtype; + int newlen; + charset = SG(default_charset) ? SG(default_charset) : SAPI_DEFAULT_CHARSET; + + if (strcasecmp(charset, "none") != 0 && strncmp(*mimetype, "text/", 5) == 0 && strstr(*mimetype, "charset=") == NULL) { + newlen = len + (sizeof(";charset=")-1) + strlen(charset); + newtype = emalloc(newlen + 1); + strlcpy(newtype, *mimetype, len); + strlcat(newtype, ";charset=", len); + if (*mimetype != NULL) { + efree(*mimetype); + } + *mimetype = newtype; + return newlen; + } + return 0; +} + +/* + * Called from php_request_startup() for every request. + */ +SAPI_API void sapi_activate(SLS_D) +{ zend_llist_init(&SG(sapi_headers).headers, sizeof(sapi_header_struct), (void (*)(void *)) sapi_free_header, 0); SG(sapi_headers).send_default_content_type = 1; - if (PG(default_mimetype) != NULL) { - if (strncasecmp(PG(default_mimetype), "text/", 5) == 0) { - len = strlen(PG(default_mimetype)) + sizeof(";charset=") + strlen(PG(default_charset)); - /* add charset for text output */ - SG(sapi_headers).default_content_type = emalloc(len); - strcpy(SG(sapi_headers).default_content_type, PG(default_mimetype)); - strlcat(SG(sapi_headers).default_content_type, ";charset=", len); - strlcat(SG(sapi_headers).default_content_type, PG(default_charset), len); - } else { - /* don't add charset */ - len = strlen(PG(default_mimetype)) + 1; - SG(sapi_headers).default_content_type = emalloc(len); - strcpy(SG(sapi_headers).default_content_type, PG(default_mimetype)); - } - SG(sapi_headers).default_content_type[len - 1] = '\0'; - SG(sapi_headers).default_content_type_size = len; - } else { - SG(sapi_headers).default_content_type = NULL; - SG(sapi_headers).default_content_type_size = 0; - } SG(sapi_headers).http_response_code = 200; SG(sapi_headers).http_status_line = NULL; SG(headers_sent) = 0; @@ -295,7 +324,7 @@ */ SAPI_API int sapi_add_header(char *header_line, uint header_line_len) { - int retval; + int retval, free_header = 0; sapi_header_struct sapi_header; char *colon_offset; SLS_FETCH(); @@ -329,6 +358,25 @@ if (colon_offset) { *colon_offset = 0; if (!STRCASECMP(header_line, "Content-Type")) { + char *ptr = colon_offset, *mimetype = NULL, *newheader; + size_t len = header_line_len - (ptr - header_line), newlen; + while (*ptr == ' ' && *ptr != '\0') { + ptr++; + } + mimetype = estrdup(ptr); + newlen = sapi_apply_default_charset(&mimetype, len); + if (newlen != 0) { + newlen += sizeof("Content-type: "); + newheader = emalloc(newlen); + strlcpy(newheader, "Content-type: ", newlen); + strlcpy(newheader, mimetype, newlen); + sapi_header.header = newheader; + sapi_header.header_len = newlen - 1; + colon_offset = strchr(newheader, ':'); + *colon_offset = '\0'; + free_header = 1; + } + efree(mimetype); SG(sapi_headers).send_default_content_type = 0; } else if (!STRCASECMP(header_line, "Location")) { SG(sapi_headers).http_response_code = 302; /* redirect */ @@ -350,6 +398,9 @@ if (retval & SAPI_HEADER_ADD) { zend_llist_add_element(&SG(sapi_headers).headers, (void *) &sapi_header); } + if (free_header) { + efree(sapi_header.header); + } return SUCCESS; } @@ -488,3 +539,10 @@ return NULL; } } + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ Index: php4/SAPI.h diff -u php4/SAPI.h:1.40 php4/SAPI.h:1.41 --- php4/SAPI.h:1.40 Thu Feb 24 14:00:47 2000 +++ php4/SAPI.h Fri Feb 25 13:27:02 2000 @@ -100,6 +100,8 @@ uint read_post_bytes; unsigned char headers_sent; struct stat global_stat; + char *default_mimetype; + char *default_charset; } sapi_globals_struct; @@ -141,6 +143,9 @@ SAPI_API int sapi_flush(); SAPI_API struct stat *sapi_get_stat(); SAPI_API char *sapi_getenv(char *name, int name_len); + +SAPI_API char *sapi_get_default_content_type(SLS_D); +SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len SLS_DC); struct _sapi_module_struct { char *name; Index: php4/configure.in diff -u php4/configure.in:1.93 php4/configure.in:1.94 --- php4/configure.in:1.93 Wed Feb 23 10:57:08 2000 +++ php4/configure.in Fri Feb 25 13:27:02 2000 @@ -1,4 +1,4 @@ -dnl ## $Id: configure.in,v 1.93 2000/02/23 18:57:08 thies Exp $ -*- sh -*- +dnl ## $Id: configure.in,v 1.94 2000/02/25 21:27:02 ssb Exp $ -*- sh -*- dnl ## Process this file with autoconf to produce a configure script. divert(1) @@ -68,14 +68,16 @@ AM_CONFIG_HEADER(php_config.h) AM_MAINTAINER_MODE +AC_CANONICAL_HOST dnl We want this one before the checks, so the checks can modify CFLAGS. test -z "$CFLAGS" && auto_cflags=1 -dnl If we're using cc on HP-UX, add -Ae -D_HPUX_SOURCE [obsolete] -dnl if test -n "$auto_cflags" && test "uname -s 2>/dev/null" = "HP-UX"; then -dnl test -n "$GCC" || CFLAGS="-Ae $CFLAGS -D_HPUX_SOURCE" -dnl fi +dnl ## If we're using cc on HP-UX, add -Ae -D_HPUX_SOURCE [obsolete] +dnl ## if test -n "$auto_cflags" && test "uname -s 2>/dev/null" = "HP-UX" +dnl ## then +dnl ## test -n "$GCC" || CFLAGS="-Ae $CFLAGS -D_HPUX_SOURCE" +dnl ## fi dnl Checks for programs. AC_PROG_YACC @@ -93,10 +95,10 @@ fi dnl ## there has to be a better way... -dnl## OLDLIBS=$LIBS; LIBS="" +dnl ## OLDLIBS=$LIBS; LIBS="" AC_PROG_CC AC_AIX -dnl## LIBS=$OLDLIBS +dnl ## LIBS=$OLDLIBS AM_PROG_CC_STDC @@ -106,9 +108,9 @@ AM_PROG_LEX -dnl Make flex scanners use const if they can, even if __STDC__ is not -dnl true, for compilers like Sun's that only set __STDC__ true in -dnl "limit-to-ANSI-standard" mode, not in "ANSI-compatible" mode +dnl ## Make flex scanners use const if they can, even if __STDC__ is not +dnl ## true, for compilers like Sun's that only set __STDC__ true in +dnl ## "limit-to-ANSI-standard" mode, not in "ANSI-compatible" mode AC_C_CONST if test "$ac_cv_c_const" = "yes" ; then LEX_CFLAGS="-DYY_USE_CONST" Index: php4/main.c diff -u php4/main.c:1.215 php4/main.c:1.216 --- php4/main.c:1.215 Thu Feb 24 14:00:47 2000 +++ php4/main.c Fri Feb 25 13:27:02 2000 @@ -19,7 +19,7 @@ */ -/* $Id: main.c,v 1.215 2000/02/24 22:00:47 ssb Exp $ */ +/* $Id: main.c,v 1.216 2000/02/25 21:27:02 ssb Exp $ */ #include <stdio.h> @@ -66,6 +66,7 @@ #include "zend_indent.h" #include "php_content_types.h" +#include "php_ticks.h" #include "SAPI.h" @@ -202,8 +203,8 @@ STD_PHP_INI_ENTRY("auto_append_file", NULL, PHP_INI_ALL, OnUpdateString, auto_append_file, php_core_globals, core_globals) STD_PHP_INI_ENTRY("auto_prepend_file", NULL, PHP_INI_ALL, 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_MIMETYPE, PHP_INI_ALL, OnUpdateStringUnempty, default_charset, php_core_globals, core_globals) - STD_PHP_INI_ENTRY("default_mimetype",SAPI_DEFAULT_CHARSET, PHP_INI_ALL, OnUpdateStringUnempty, default_mimetype, php_core_globals, core_globals) + STD_PHP_INI_ENTRY("default_charset", SAPI_DEFAULT_CHARSET, PHP_INI_ALL, OnUpdateStringUnempty, default_charset, sapi_globals_struct,sapi_globals) + STD_PHP_INI_ENTRY("default_mimetype",SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL, OnUpdateStringUnempty, default_mimetype, sapi_globals_struct,sapi_globals) STD_PHP_INI_ENTRY("error_log", NULL, PHP_INI_ALL, OnUpdateString, error_log, php_core_globals, core_globals) STD_PHP_INI_ENTRY("extension_dir", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, extension_dir, php_core_globals, core_globals) STD_PHP_INI_ENTRY("gpc_order", "GPC", PHP_INI_ALL, OnUpdateStringUnempty, gpc_order, php_core_globals, core_globals) @@ -801,7 +802,7 @@ zuf.block_interruptions = sapi_module.block_interruptions; zuf.unblock_interruptions = sapi_module.unblock_interruptions; zuf.get_ini_entry = php_get_ini_entry_for_zend; - zuf.ticks_function = NULL; + zuf.ticks_function = php_run_ticks; zend_startup(&zuf, NULL); #ifdef ZTS @@ -851,6 +852,11 @@ REGISTER_MAIN_STRINGL_CONSTANT("PHP_VERSION", PHP_VERSION, sizeof(PHP_VERSION)-1, CONST_PERSISTENT | CONST_CS); REGISTER_MAIN_STRINGL_CONSTANT("PHP_OS", php_os, strlen(php_os), CONST_PERSISTENT | CONST_CS); + if (php_startup_ticks(PLS_C) == FAILURE) { + php_printf("Unable to start PHP ticks\n"); + return FAILURE; + } + if (php_startup_internal_extensions() == FAILURE) { php_printf("Unable to start builtin modules\n"); return FAILURE; @@ -878,6 +884,7 @@ void php_module_shutdown() { int module_number=0; /* for UNREGISTER_INI_ENTRIES() */ + PLS_FETCH(); if (!module_initialized) { return; @@ -891,6 +898,7 @@ WSACleanup(); #endif + php_shutdown_ticks(PLS_C); sapi_flush(); global_lock_destroy(); Index: php4/php.ini-dist diff -u php4/php.ini-dist:1.26 php4/php.ini-dist:1.27 --- php4/php.ini-dist:1.26 Thu Feb 24 07:41:34 2000 +++ php4/php.ini-dist Fri Feb 25 13:27:02 2000 @@ -183,6 +183,12 @@ auto_prepend_file = auto_append_file = +; As of 4.0b4, PHP always outputs a character encoding by default in +; the Content-type: header. Set default_charset to "none" to disable +; this. PHP's built-in default is text/html with the iso-8859-1 +; charset. +;default_mimetype = "text/html" +;default_charset = "iso-8859-1" ;;;;;;;;;;;;;;;;;;;;;;;;; ; Paths and Directories ; @@ -386,3 +392,6 @@ ;assert.callback = 0 ; user-function to be called if an assertion fails. ;assert.quiet_eval = 0 ; eval the expression with current error_reporting(). set to true if you want error_reporting(0) around the eval(). +; Local Variables: +; tab-width: 4 +; End: Index: php4/php_globals.h diff -u php4/php_globals.h:1.42 php4/php_globals.h:1.43 --- php4/php_globals.h:1.42 Thu Feb 24 14:00:47 2000 +++ php4/php_globals.h Fri Feb 25 13:27:02 2000 @@ -42,6 +42,7 @@ extern ZEND_API struct _php_core_globals core_globals; #endif +struct _php_tick_function_entry; struct _php_core_globals { zend_bool magic_quotes_gpc; @@ -83,9 +84,6 @@ char *gpc_order; char *variables_order; - char *default_mimetype; - char *default_charset; - zend_bool expose_php; zend_bool track_vars; @@ -100,6 +98,8 @@ long max_execution_time; unsigned char header_is_being_sent; + + zend_llist tick_functions; }; Index: php4/php_version.h diff -u php4/php_version.h:1.25 php4/php_version.h:1.26 --- php4/php_version.h:1.25 Thu Feb 24 14:00:47 2000 +++ php4/php_version.h Fri Feb 25 13:27:02 2000 @@ -1,3 +1,3 @@ /* automatically generated by configure */ -/* edit configure.in to change version number */ -#define PHP_VERSION "4.0b5-dev" +/* edit configure.in.in to change version number */ +#define PHP_VERSION "4.0b4-dev" Index: php4/build/rules.mk diff -u php4/build/rules.mk:1.7 php4/build/rules.mk:1.8 --- php4/build/rules.mk:1.7 Wed Jan 26 13:58:46 2000 +++ php4/build/rules.mk Fri Feb 25 13:27:03 2000 @@ -21,7 +21,7 @@ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ############################################################################## -# $Id: rules.mk,v 1.7 2000/01/26 21:58:46 sas Exp $ +# $Id: rules.mk,v 1.8 2000/02/25 21:27:03 ssb Exp $ # include $(DEPTH)/config_vars.mk @@ -116,7 +116,7 @@ echo "installing shared modules into $(moduledir)" && \ rm -f modules/*.la && \ cp modules/* $(moduledir) || true - + include $(srcdir)/.deps .PHONY: all-recursive clean-recursive install-recursive \ Index: php4/build/rules_pear.mk diff -u php4/build/rules_pear.mk:1.3 php4/build/rules_pear.mk:1.4 --- php4/build/rules_pear.mk:1.3 Sat Jan 1 12:48:42 2000 +++ php4/build/rules_pear.mk Fri Feb 25 13:27:03 2000 @@ -21,7 +21,7 @@ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ############################################################################## -# $Id: rules_pear.mk,v 1.3 2000/01/01 20:48:42 sas Exp $ +# $Id: rules_pear.mk,v 1.4 2000/02/25 21:27:03 ssb Exp $ # include $(DEPTH)/config_vars.mk @@ -120,7 +120,7 @@ echo "installing shared modules into $(moduledir)" && \ rm -f modules/*.la && \ cp modules/* $(moduledir) || true - + include $(srcdir)/.deps .PHONY: all-recursive clean-recursive install-recursive \ Index: php4/ext/standard/array.c diff -u php4/ext/standard/array.c:1.31 php4/ext/standard/array.c:1.32 --- php4/ext/standard/array.c:1.31 Thu Feb 24 07:06:33 2000 +++ php4/ext/standard/array.c Fri Feb 25 13:27:03 2000 @@ -2135,3 +2135,10 @@ efree(args); RETURN_TRUE; } + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ Index: php4/sapi/apache/mod_php4.c diff -u php4/sapi/apache/mod_php4.c:1.35 php4/sapi/apache/mod_php4.c:1.36 --- php4/sapi/apache/mod_php4.c:1.35 Thu Feb 24 14:00:47 2000 +++ php4/sapi/apache/mod_php4.c Fri Feb 25 13:27:03 2000 @@ -17,7 +17,7 @@ | PHP 4.0 patches by Zeev Suraski <zeev@zend.com> | +----------------------------------------------------------------------+ */ -/* $Id: mod_php4.c,v 1.35 2000/02/24 22:00:47 ssb Exp $ */ +/* $Id: mod_php4.c,v 1.36 2000/02/25 21:27:03 ssb Exp $ */ #define NO_REGEX_EXTRA_H @@ -399,6 +399,22 @@ return 0; } +static char *php_apache_get_default_mimetype(request_rec *r SLS_DC) +{ + + char *mimetype; + if (SG(default_mimetype) || SG(default_charset)) { + /* Assume output will be of the default MIME type. Individual + scripts may change this later. */ + char *tmpmimetype; + tmpmimetype = sapi_get_default_content_type(SLS_C); + mimetype = pstrdup(r->pool, tmpmimetype); + efree(tmpmimetype); + } else { + mimetype = SAPI_DEFAULT_CONTENT_TYPE; + } + return mimetype; +} int send_php(request_rec *r, int display_source_mode, char *filename) { @@ -428,7 +444,7 @@ * directive, then decline to handle this request */ if (!php_apache_info.engine) { - r->content_type = SAPI_DEFAULT_CONTENT_TYPE; /* XXX FIXME use default_{mimetype|charset} directives */ + r->content_type = php_apache_get_default_mimetype(r SLS_CC); r->allowed |= (1 << METHODS) - 1; return DECLINED; } @@ -458,9 +474,9 @@ set_etag(r); #endif } - /* Assume output will be HTML. Individual scripts may change this - further down the line */ - r->content_type = SAPI_DEFAULT_CONTENT_TYPE; /* XXX FIXME use default_{mimetype|charset} directives */ + /* Assume output will be of the default MIME type. Individual + scripts may change this later in the request. */ + r->content_type = php_apache_get_default_mimetype(r SLS_CC); /* Init timeout */ hard_timeout("send", r);

« previous php.version4 (#11001) next »