[PHP4BETA] CVS update: php4
| From: | zeev | Date: | Sun, 09 May 1999 08:47:48 +0000 |
| Subject: | [PHP4BETA] CVS update: php4 | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-700@lists.php.net to get a copy of this message | ||
Date: Sunday May 9, 1999 @ 4:47
Author: zeev
Update of /repository/php4
In directory php:/tmp/cvs-serv25538
Modified Files:
SAPI.c SAPI.h cgi_main.c main.c mod_php3.c php_ini.c php_ini.h
request_info.c request_info.h
Log Message:
* Finalizing the PHP version of SAPI. Support POST and cookies among other things.
* Fully implement ISAPI support - POST and cookies among other things.
* Almost completely rewrote phpinfo(). Allow modules to easily display their
information in phpinfo() without modifying phpinfo() itself (prototype for
the module info function was changed, thus the large amount of updated module
files).
* Initial extended SAPI support for Apache, completely untested.
* CGI now uses SAPI fully as well.
Index: php4/SAPI.c
diff -u php4/SAPI.c:1.11 php4/SAPI.c:1.12
--- php4/SAPI.c:1.11 Thu May 6 18:31:46 1999
+++ php4/SAPI.c Sun May 9 04:47:48 1999
@@ -2,10 +2,12 @@
+----------------------------------------------------------------------+
| Server API Abstraction Layer |
+----------------------------------------------------------------------+
- | Copyright (c) 1999 SAPI Development Team |
+ | Copyright (c) 1998, 1999 SAPI Development Team |
+----------------------------------------------------------------------+
- | This source file is subject to the GNU public license, that is |
- | bundled with this package in the file LICENSE. |
+ | This source file is subject to the Zend license, that is bundled |
+ | with this package in the file LICENSE. If you did not receive a |
+ | copy of the Zend license, please mail us at zend@zend.com so we can |
+ | send you a copy immediately. |
+----------------------------------------------------------------------+
| Design: Shane Caraveo <shane@caraveo.com> |
| Authors: Andi Gutmans <andi@zend.com> |
@@ -59,17 +61,21 @@
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).content_type.header = NULL;
+ SG(sapi_headers).send_default_content_type = 1;
SG(sapi_headers).http_response_code = 200;
SG(headers_sent) = 0;
+ if (SG(server_context)) {
+ SG(request_info).post_data = sapi_module.read_post(SLS_C);
+ SG(request_info).cookie_data = sapi_module.read_cookies(SLS_C);
+ }
}
SAPI_API void sapi_deactivate(SLS_D)
{
zend_llist_destroy(&SG(sapi_headers).headers);
- if (SG(sapi_headers).content_type.header) {
- efree(SG(sapi_headers).content_type.header);
+ if (SG(server_context) && SG(request_info).post_data) {
+ efree(SG(request_info).post_data);
}
}
@@ -93,7 +99,7 @@
sapi_header.header_len = header_line_len;
if (sapi_module.header_handler) {
- retval = sapi_module.header_handler(&sapi_header, &SG(sapi_headers));
+ retval = sapi_module.header_handler(&sapi_header, &SG(sapi_headers) SLS_CC);
} else {
retval = SAPI_HEADER_ADD;
}
@@ -107,13 +113,7 @@
if (colon_offset) {
*colon_offset = 0;
if (!STRCASECMP(header_line, "Content-Type")) {
- if (SG(sapi_headers).content_type.header) {
- efree(SG(sapi_headers).content_type.header);
- }
- *colon_offset = ':';
- SG(sapi_headers).content_type.header = (char *) header_line;
- SG(sapi_headers).content_type.header_len = header_line_len;
- return SUCCESS;
+ SG(sapi_headers).send_default_content_type = 0;
}
*colon_offset = ':';
}
@@ -145,9 +145,7 @@
return SUCCESS;
break;
case SAPI_HEADER_DO_SEND:
- if (SG(sapi_headers).content_type.header) {
- sapi_module.send_header(&SG(sapi_headers).content_type, SG(server_context));
- } else {
+ if (SG(sapi_headers).send_default_content_type) {
sapi_module.send_header(&default_header, SG(server_context));
}
zend_llist_apply_with_argument(&SG(sapi_headers).headers, (void (*)(void *, void *))
sapi_module.send_header, SG(server_context));
Index: php4/SAPI.h
diff -u php4/SAPI.h:1.10 php4/SAPI.h:1.11
--- php4/SAPI.h:1.10 Thu May 6 17:58:49 1999
+++ php4/SAPI.h Sun May 9 04:47:48 1999
@@ -24,8 +24,8 @@
typedef struct {
zend_llist headers;
- sapi_header_struct content_type;
int http_response_code;
+ unsigned char send_default_content_type;
} sapi_headers_struct;
@@ -36,11 +36,17 @@
typedef struct {
+ char *request_method;
char *query_string;
+ char *post_data;
+ char *cookie_data;
+ uint content_length;
char *path_translated;
char *request_uri;
+ char *content_type;
+
unsigned char headers_only;
} sapi_request_info;
@@ -89,9 +95,12 @@
void (*sapi_error)(int type, const char *error_msg, ...);
- int (*header_handler)(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers);
+ int (*header_handler)(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC);
int (*send_headers)(sapi_headers_struct *sapi_headers SLS_DC);
void (*send_header)(sapi_header_struct *sapi_header, void *server_context);
+
+ char *(*read_post)(SLS_D);
+ char *(*read_cookies)(SLS_D);
};
Index: php4/cgi_main.c
diff -u php4/cgi_main.c:1.8 php4/cgi_main.c:1.9
--- php4/cgi_main.c:1.8 Thu May 6 17:58:49 1999
+++ php4/cgi_main.c Sun May 9 04:47:48 1999
@@ -85,6 +85,29 @@
}
+static char *sapi_cgi_read_post(SLS_D)
+{
+ uint read_bytes=0, tmp_read_bytes;
+ char *result = (char *) emalloc(SG(request_info).content_length+1);
+
+ while (read_bytes < SG(request_info).content_length) {
+ tmp_read_bytes = read(0, result+read_bytes, SG(request_info).content_length-read_bytes);
+ if (tmp_read_bytes<=0) {
+ break;
+ }
+ read_bytes += tmp_read_bytes;
+ }
+ result[read_bytes]=0;
+ return result;
+}
+
+
+static char *sapi_cgi_read_cookies(SLS_D)
+{
+ return getenv("HTTP_COOKIE");
+}
+
+
static sapi_module_struct sapi_module = {
"PHP Language", /* name */
@@ -98,6 +121,9 @@
NULL, /* header handler */
NULL, /* send headers handler */
sapi_cgi_send_header, /* send header handler */
+
+ sapi_cgi_read_post, /* read POST data */
+ sapi_cgi_read_cookies /* read Cookies */
};
@@ -132,15 +158,19 @@
static void init_request_info(SLS_D)
{
- char *request_method = getenv("REQUEST_METHOD");
+ char *content_length = getenv("CONTENT_LENGTH");
+ SG(request_info).request_method = getenv("REQUEST_METHOD");
SG(request_info).query_string = getenv("QUERY_STRING");
SG(request_info).request_uri = getenv("PATH_INFO");
- if (request_method && !strcmp(request_method, "HEAD")) {
+ SG(request_info).path_translated = NULL; /* we have to update it later, when we have that
information */
+ if (SG(request_info).request_method && !strcmp(SG(request_info).request_method,
"HEAD")) {
SG(request_info).headers_only = 1;
} else {
SG(request_info).headers_only = 0;
}
+ SG(request_info).content_type = getenv("CONTENT_TYPE");
+ SG(request_info).content_length = (content_length?atoi(content_length):0);
}
@@ -229,6 +259,8 @@
sapi_globals = ts_resource(sapi_globals_id);
#endif
+ init_request_info(SLS_C);
+ SG(server_context) = (void *) 1; /* avoid server_context==NULL checks */
CG(extended_info) = 0;
if (!cgi) { /* never execute the arguments if you are a CGI */
@@ -322,7 +354,6 @@
php3_TreatHeaders();
- init_request_info(SLS_C);
if (!cgi) {
if (!SG(request_info).query_string) {
Index: php4/main.c
diff -u php4/main.c:1.48 php4/main.c:1.49
--- php4/main.c:1.48 Thu May 6 17:58:49 1999
+++ php4/main.c Sun May 9 04:47:48 1999
@@ -29,7 +29,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: main.c,v 1.48 1999/05/06 21:58:49 zeev Exp $ */
+/* $Id: main.c,v 1.49 1999/05/09 08:47:48 zeev Exp $ */
#include <stdio.h>
@@ -186,41 +186,41 @@
# define DEFAULT_SENDMAIL_PATH NULL
#endif
PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("short_open_tag", "1", PHP_INI_ALL, OnUpdateInt, short_tags, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("asp_tags", "0", PHP_INI_ALL, OnUpdateInt, asp_tags, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("short_open_tag", "1", PHP_INI_ALL, OnUpdateInt, short_tags, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("asp_tags", "0", PHP_INI_ALL, OnUpdateInt, asp_tags, php_core_globals, core_globals)
PHP_INI_ENTRY("precision", "14", PHP_INI_ALL, OnSetPrecision)
- PHP_INI_ENTRY("highlight.comment", HL_COMMENT_COLOR, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("highlight.default", HL_DEFAULT_COLOR, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("highlight.html", HL_HTML_COLOR, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("highlight.string", HL_STRING_COLOR, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("highlight.bg", HL_BG_COLOR, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("highlight.keyword", HL_KEYWORD_COLOR, PHP_INI_ALL, NULL)
-
- STD_PHP_INI_ENTRY("magic_quotes_gpc", "1", PHP_INI_ALL, OnUpdateInt, magic_quotes_gpc, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("magic_quotes_runtime", "0", PHP_INI_ALL, OnUpdateInt, magic_quotes_runtime, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("magic_quotes_sybase", "0", PHP_INI_ALL, OnUpdateInt, magic_quotes_sybase, php_core_globals, core_globals)
+ PHP_INI_ENTRY_EX("highlight.comment", HL_COMMENT_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
+ PHP_INI_ENTRY_EX("highlight.default", HL_DEFAULT_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
+ PHP_INI_ENTRY_EX("highlight.html", HL_HTML_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
+ PHP_INI_ENTRY_EX("highlight.string", HL_STRING_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
+ PHP_INI_ENTRY_EX("highlight.bg", HL_BG_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
+ PHP_INI_ENTRY_EX("highlight.keyword", HL_KEYWORD_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
+
+ STD_PHP_INI_BOOLEAN("magic_quotes_gpc", "1", PHP_INI_ALL, OnUpdateInt, magic_quotes_gpc, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("magic_quotes_runtime", "0", PHP_INI_ALL, OnUpdateInt, magic_quotes_runtime, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("magic_quotes_sybase", "0", PHP_INI_ALL, OnUpdateInt, magic_quotes_sybase, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("safe_mode", "0", PHP_INI_SYSTEM, OnUpdateInt, safe_mode, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("sql.safe_mode", "0", PHP_INI_SYSTEM, OnUpdateInt, sql_safe_mode, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("safe_mode", "0", PHP_INI_SYSTEM, OnUpdateInt, safe_mode, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("sql.safe_mode", "0", PHP_INI_SYSTEM, OnUpdateInt, sql_safe_mode, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("safe_mode_exec_dir", "1", PHP_INI_SYSTEM, OnUpdateString, safe_mode_exec_dir, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("enable_dl", "1", PHP_INI_SYSTEM, OnUpdateInt, enable_dl, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("enable_dl", "1", PHP_INI_SYSTEM, OnUpdateInt, enable_dl, php_core_globals, core_globals)
PHP_INI_ENTRY("SMTP", "localhost", PHP_INI_ALL, NULL)
PHP_INI_ENTRY("sendmail_path", DEFAULT_SENDMAIL_PATH, PHP_INI_SYSTEM, NULL)
PHP_INI_ENTRY("sendmail_from", NULL, PHP_INI_ALL, NULL)
PHP_INI_ENTRY("error_reporting", NULL, PHP_INI_ALL, OnUpdateErrorReporting)
- STD_PHP_INI_ENTRY("display_errors", "1", PHP_INI_ALL, OnUpdateInt, display_errors, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("track_errors", "0", PHP_INI_ALL, OnUpdateInt, track_errors, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("log_errors", "0", PHP_INI_ALL, OnUpdateInt, log_errors, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("display_errors", "1", PHP_INI_ALL, OnUpdateInt, display_errors, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("track_errors", "0", PHP_INI_ALL, OnUpdateInt, track_errors, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("log_errors", "0", PHP_INI_ALL, OnUpdateInt, log_errors, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("error_log", NULL, PHP_INI_ALL, OnUpdateString, error_log, 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("auto_append_file", NULL, PHP_INI_ALL, OnUpdateString, auto_append_file, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("y2k_compliance", "0", PHP_INI_ALL, OnUpdateInt, y2k_compliance, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("y2k_compliance", "0", PHP_INI_ALL, OnUpdateInt, y2k_compliance, 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("user_dir", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, user_dir, php_core_globals, core_globals)
@@ -233,12 +233,12 @@
PHP_INI_ENTRY("browscap", NULL, PHP_INI_SYSTEM, NULL)
- PHP_INI_ENTRY("define_syslog_variables", "0", PHP_INI_ALL, NULL)
+ PHP_INI_ENTRY_EX("define_syslog_variables", "0", PHP_INI_ALL, NULL, php_ini_boolean_displayer_cb)
PHP_INI_ENTRY("max_execution_time", "30", PHP_INI_ALL, OnChangeMaxExecutionTime)
PHP_INI_ENTRY("memory_limit", "8388608", PHP_INI_ALL, OnChangeMemoryLimit)
- STD_PHP_INI_ENTRY("track_vars", "0", PHP_INI_ALL, OnUpdateInt, track_vars, php_core_globals, core_globals)
+ STD_PHP_INI_BOOLEAN("track_vars", "0", PHP_INI_ALL, OnUpdateInt, track_vars, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("gpc_order", "GPC", PHP_INI_ALL, OnUpdateStringUnempty, gpc_order, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("arg_separator", "&", PHP_INI_ALL, OnUpdateStringUnempty, arg_separator, php_core_globals, core_globals)
PHP_INI_END()
@@ -771,6 +771,7 @@
int module_number=0; /* for REGISTER_INI_ENTRIES() */
#ifdef ZTS
php_core_globals *core_globals;
+ sapi_globals_struct *sapi_globals = ts_resource(sapi_globals_id);
#endif
#if (WIN32|WINNT) && !(USE_SAPI)
WORD wVersionRequested;
@@ -779,6 +780,8 @@
wVersionRequested = MAKEWORD(2, 0);
#endif
+ SG(server_context) = NULL;
+ sapi_activate(SLS_C);
if (module_initialized) {
return SUCCESS;
@@ -805,6 +808,7 @@
#endif
PG(header_is_being_sent) = 0;
+ SG(request_info).headers_only = 0;
#if HAVE_SETLOCALE
setlocale(LC_CTYPE, "");
@@ -838,6 +842,7 @@
return FAILURE;
}
module_initialized = 1;
+ sapi_deactivate(SLS_C);
return SUCCESS;
}
@@ -903,7 +908,7 @@
switch(*p++) {
case 'p':
case 'P':
- if (!_gpc_flags[0] && php3_headers_unsent() && request_info.request_method
&& !strcasecmp(request_info.request_method, "post")) {
+ if (!_gpc_flags[0] && !SG(headers_sent) && SG(request_info).request_method
&& !strcasecmp(SG(request_info).request_method, "POST")) {
php3_treat_data(PARSE_POST, NULL); /* POST Data */
_gpc_flags[0]=1;
}
Index: php4/mod_php3.c
diff -u php4/mod_php3.c:1.14 php4/mod_php3.c:1.15
--- php4/mod_php3.c:1.14 Sun May 2 15:16:21 1999
+++ php4/mod_php3.c Sun May 9 04:47:48 1999
@@ -28,7 +28,7 @@
| PHP4 patches by Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: mod_php3.c,v 1.14 1999/05/02 19:16:21 zeev Exp $ */
+/* $Id: mod_php3.c,v 1.15 1999/05/09 08:47:48 zeev Exp $ */
#include "httpd.h"
#include "http_config.h"
@@ -64,6 +64,8 @@
void php_module_shutdown_for_exec();
int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals);
+int php3_error(int type, const char *format, ...);
+
#include "util_script.h"
#include "php_version.h"
@@ -118,6 +120,56 @@
}
+char *sapi_apache_read_post(SLS_D)
+{
+ return NULL;
+}
+
+
+char *sapi_apache_read_cookies(SLS_D)
+{
+ return table_get(r->subprocess_env, "HTTP_COOKIE");
+}
+
+
+int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers
SLS_DC)
+{
+ char *header_name, *header_content, *p;
+ request_rec *r = (request_rec *) SG(server_context);
+
+ header_name = sapi_header->header;
+
+ header_content = p = strchr(header_name, ':');
+ if (!p) {
+ return 0;
+ }
+
+ *p = 0;
+ do {
+ header_content++
+ } while (*header_content==' ');
+
+ if (!strcasecmp(header_name, "Content-Type")) {
+ r->content_type = pstrdup(header_content);
+ } else if (!strcasecmp(header_name, "Location")) {
+ r->status = REDIRECT;
+ } else {
+ table_set(r->headers_out, header_name, header_content);
+ }
+
+ *p = ':'; /* a well behaved header handler shouldn't change its original arguments
*/
+
+ return 0; /* don't use the default SAPI mechanism, Apache duplicates this functionality */
+}
+
+
+void sapi_apache_send_headers(sapi_headers_struct *sapi_headers SLS_DC)
+{
+ send_http_header((request_rec *) SG(server_context));
+ return SAPI_HEADER_SENT_SUCCESSFULLY;
+}
+
+
sapi_module_struct sapi_module = {
"PHP Language", /* name */
@@ -125,6 +177,15 @@
php_module_shutdown_wrapper, /* shutdown */
zend_apache_ub_write, /* unbuffered write */
+
+ php3_error, /* error handler */
+
+ sapi_apache_header_handler, /* header handler */
+ sapi_apache_send_headers, /* send headers handler */
+ NULL, /* send header handler */
+
+ sapi_apache_read_post, /* read POST data */
+ sapi_apache_read_cookies /* read Cookies */
};
Index: php4/php_ini.c
diff -u php4/php_ini.c:1.14 php4/php_ini.c:1.15
--- php4/php_ini.c:1.14 Wed Apr 28 17:14:47 1999
+++ php4/php_ini.c Sun May 9 04:47:48 1999
@@ -34,7 +34,11 @@
#include "php_ini.h"
#include "zend_alloc.h"
#include "php_globals.h"
+#include "ext/standard/info.h"
+#define ENTRY_NAME_COLOR "#999999"
+#define CONTENTS_COLOR "#DDDDDD"
+
static HashTable known_directives;
@@ -93,7 +97,7 @@
* Registration / unregistration
*/
-int php_register_ini_entries(php_ini_entry *ini_entry, int module_number)
+PHPAPI int php_register_ini_entries(php_ini_entry *ini_entry, int module_number)
{
php_ini_entry *p = ini_entry;
php_ini_entry *hashed_ini_entry;
@@ -126,13 +130,13 @@
}
-void php_unregister_ini_entries(int module_number)
+PHPAPI void php_unregister_ini_entries(int module_number)
{
_php3_hash_apply_with_argument(&known_directives, (int (*)(void *, void *))
php_remove_ini_entries, (void *) &module_number);
}
-int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int
modify_type)
+PHPAPI int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint
new_value_length, int modify_type)
{
php_ini_entry *ini_entry;
char *duplicate;
@@ -166,7 +170,7 @@
}
-int php_restore_ini_entry(char *name, uint name_length)
+PHPAPI int php_restore_ini_entry(char *name, uint name_length)
{
php_ini_entry *ini_entry;
@@ -182,11 +186,25 @@
}
+PHPAPI int php_ini_register_displayer(char *name, uint name_length, void (*displayer)(php_ini_entry
*ini_entry, int type))
+{
+ php_ini_entry *ini_entry;
+
+ if (_php3_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE)
{
+ return FAILURE;
+ }
+
+ ini_entry->displayer = displayer;
+ return SUCCESS;
+}
+
+
+
/*
* Data retrieval
*/
-long php_ini_long(char *name, uint name_length, int orig)
+PHPAPI long php_ini_long(char *name, uint name_length, int orig)
{
php_ini_entry *ini_entry;
@@ -202,7 +220,7 @@
}
-double php_ini_double(char *name, uint name_length, int orig)
+PHPAPI double php_ini_double(char *name, uint name_length, int orig)
{
php_ini_entry *ini_entry;
@@ -218,7 +236,7 @@
}
-char *php_ini_string(char *name, uint name_length, int orig)
+PHPAPI char *php_ini_string(char *name, uint name_length, int orig)
{
php_ini_entry *ini_entry;
@@ -234,8 +252,102 @@
}
+
+static void php_ini_displayer_cb(php_ini_entry *ini_entry, int type)
+{
+ if (ini_entry->displayer) {
+ ini_entry->displayer(ini_entry, type);
+ } else {
+ char *display_string;
+ uint display_string_length;
+
+ if (type==PHP_INI_DISPLAY_ORIG && ini_entry->orig_value) {
+ display_string = ini_entry->orig_value;
+ display_string_length = ini_entry->orig_value_length;
+ } else if (ini_entry->value && ini_entry->value[0]) {
+ display_string = ini_entry->value;
+ display_string_length = ini_entry->value_length;
+ } else {
+ display_string = "<i>no value</i>";
+ display_string_length = sizeof("<i>no value</i>")-1;
+ }
+ PHPWRITE(display_string, display_string_length);
+ }
+}
+
+
+PHP_INI_DISP(php_ini_boolean_displayer_cb)
+{
+ int value;
+
+ if (type==PHP_INI_DISPLAY_ORIG && ini_entry->orig_value) {
+ value = atoi(ini_entry->orig_value);
+ } else if (ini_entry->value) {
+ value = atoi(ini_entry->value);
+ } else {
+ value = 0;
+ }
+ if (value) {
+ PUTS("On");
+ } else {
+ PUTS("Off");
+ }
+}
+
+
+PHP_INI_DISP(php_ini_color_displayer_cb)
+{
+ char *value;
+
+ if (type==PHP_INI_DISPLAY_ORIG && ini_entry->orig_value) {
+ value = ini_entry->orig_value;
+ } else if (ini_entry->value) {
+ value = ini_entry->value;
+ } else {
+ value = NULL;
+ }
+ if (value) {
+ php3_printf("<font color=\"%s\">%s</font>", value, value);
+ } else {
+ PUTS("<i>no value</i>;");
+ }
+}
+
+
+static int php_ini_displayer(php_ini_entry *ini_entry, int module_number)
+{
+ if (ini_entry->module_number != module_number) {
+ return 0;
+ }
+
+ PUTS("<tr><td align=\"center\" bgcolor=\"" ENTRY_NAME_COLOR
"\">");
+ PHPWRITE(ini_entry->name, ini_entry->name_length-1);
+ PUTS("<td align=\"center\" bgcolor=\"" CONTENTS_COLOR
"\">");
+ php_ini_displayer_cb(ini_entry, PHP_INI_DISPLAY_ACTIVE);
+ PUTS("</td><td align=\"center\" bgcolor=\"" CONTENTS_COLOR
"\">");
+ php_ini_displayer_cb(ini_entry, PHP_INI_DISPLAY_ORIG);
+ PUTS("</td></tr>\n");
+ return 0;
+}
+
+
+PHPAPI void display_ini_entries(zend_module_entry *module)
+{
+ int module_number;
+
+ if (module) {
+ module_number = module->module_number;
+ } else {
+ module_number = 0;
+ }
+ PUTS("<table border=5 width=\"600\">\n");
+ php_info_print_table_header(3, "Directive", "Master Value", "Local
Value");
+ zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) php_ini_displayer,
(void *) module_number);
+ PUTS("</table>\n");
+}
+
-/* Standard message handlers for core_globals */
+/* Standard message handlers */
PHP_INI_MH(OnUpdateInt)
{
Index: php4/php_ini.h
diff -u php4/php_ini.h:1.7 php4/php_ini.h:1.8
--- php4/php_ini.h:1.7 Wed Apr 28 17:14:47 1999
+++ php4/php_ini.h Sun May 9 04:47:48 1999
@@ -10,6 +10,7 @@
typedef struct _php_ini_entry php_ini_entry;
#define PHP_INI_MH(name) int name(php_ini_entry *entry, char *new_value, uint new_value_length,
void *mh_arg1, void *mh_arg2, void *mh_arg3)
+#define PHP_INI_DISP(name) void name(php_ini_entry *ini_entry, int type)
struct _php_ini_entry {
int module_number;
@@ -27,6 +28,8 @@
char *orig_value;
uint orig_value_length;
int modified;
+
+ void (*displayer)(php_ini_entry *ini_entry, int type);
};
@@ -34,36 +37,57 @@
int php_ini_mshutdown();
int php_ini_rshutdown();
-int php_register_ini_entries(php_ini_entry *ini_entry, int module_number);
-void php_unregister_ini_entries(int module_number);
-int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int
modify_type);
-int php_restore_ini_entry(char *name, uint name_length);
-
-long php_ini_long(char *name, uint name_length, int orig);
-double php_ini_double(char *name, uint name_length, int orig);
-char *php_ini_string(char *name, uint name_length, int orig);
+PHPAPI int php_register_ini_entries(php_ini_entry *ini_entry, int module_number);
+PHPAPI void php_unregister_ini_entries(int module_number);
+PHPAPI int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint
new_value_length, int modify_type);
+PHPAPI int php_restore_ini_entry(char *name, uint name_length);
+PHPAPI void display_ini_entries(zend_module_entry *module);
+
+PHPAPI long php_ini_long(char *name, uint name_length, int orig);
+PHPAPI double php_ini_double(char *name, uint name_length, int orig);
+PHPAPI char *php_ini_string(char *name, uint name_length, int orig);
+
+PHPAPI int php_ini_register_displayer(char *name, uint name_length, void (*displayer)(php_ini_entry
*ini_entry, int type));
+PHPAPI PHP_INI_DISP(php_ini_boolean_displayer_cb);
+PHPAPI PHP_INI_DISP(php_ini_color_displayer_cb);
#define PHP_INI_BEGIN() static php_ini_entry ini_entries[] = {
-#define PHP_INI_END() { 0, 0, NULL, 0, NULL, NULL, NULL, 0, NULL, 0, 0 } };
+#define PHP_INI_END() { 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, NULL } };
+
+#define PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, arg3, displayer)
\
+ { 0, modifyable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value,
sizeof(default_value)-1, NULL, 0, 0, displayer },
#define PHP_INI_ENTRY3(name, default_value, modifyable, on_modify, arg1, arg2, arg3) \
- { 0, modifyable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value,
sizeof(default_value)-1, NULL, 0, 0 },
+ PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, arg3, NULL)
+#define PHP_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, arg1, arg2, displayer) \
+ PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, NULL, displayer)
+
#define PHP_INI_ENTRY2(name, default_value, modifyable, on_modify, arg1, arg2) \
- PHP_INI_ENTRY3(name, default_value, modifyable, on_modify, arg1, arg2, NULL)
+ PHP_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, arg1, arg2, NULL)
+
+#define PHP_INI_ENTRY1_EX(name, default_value, modifyable, on_modify, arg1, displayer) \
+ PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, NULL, NULL, displayer)
#define PHP_INI_ENTRY1(name, default_value, modifyable, on_modify, arg1) \
- PHP_INI_ENTRY3(name, default_value, modifyable, on_modify, arg1, NULL, NULL)
+ PHP_INI_ENTRY1_EX(name, default_value, modifyable, on_modify, arg1, NULL)
+#define PHP_INI_ENTRY_EX(name, default_value, modifyable, on_modify, displayer) \
+ PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, NULL, NULL, NULL, displayer)
+
#define PHP_INI_ENTRY(name, default_value, modifyable, on_modify) \
- PHP_INI_ENTRY3(name, default_value, modifyable, on_modify, NULL, NULL, NULL)
+ PHP_INI_ENTRY_EX(name, default_value, modifyable, on_modify, NULL)
#ifdef ZTS
#define STD_PHP_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type,
struct_ptr) \
PHP_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr##_id)
+#define STD_PHP_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type,
struct_ptr) \
+ PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr##_id, NULL, php_ini_boolean_displayer_cb)
#else
#define STD_PHP_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type,
struct_ptr) \
PHP_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr)
+#define STD_PHP_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type,
struct_ptr) \
+ PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr, NULL, php_ini_boolean_displayer_cb)
#endif
#define INI_INT(name) php_ini_long((name), sizeof(name), 0)
@@ -78,6 +102,10 @@
#define REGISTER_INI_ENTRIES() php_register_ini_entries(ini_entries, module_number)
#define UNREGISTER_INI_ENTRIES() php_unregister_ini_entries(module_number)
+#define DISPLAY_INI_ENTRIES() display_ini_entries(module)
+
+#define REGISTER_INI_DISPLAYER(name, displayer) php_ini_register_displayer((name), sizeof(name),
displayer)
+#define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, php_ini_boolean_displayer_cb)
pval *cfg_get_entry(char *name, uint name_length);
@@ -87,5 +115,9 @@
PHP_INI_MH(OnUpdateReal);
PHP_INI_MH(OnUpdateString);
PHP_INI_MH(OnUpdateStringUnempty);
+
+
+#define PHP_INI_DISPLAY_ORIG 1
+#define PHP_INI_DISPLAY_ACTIVE 2
#endif /* _PHP_INI_H */
Index: php4/request_info.c
diff -u php4/request_info.c:1.10 php4/request_info.c:1.11
--- php4/request_info.c:1.10 Sun May 2 16:04:18 1999
+++ php4/request_info.c Sun May 9 04:47:48 1999
@@ -37,17 +37,11 @@
#if CGI_BINARY
int php3_init_request_info(void *conf)
{
- char *buf; /* temporary buffers */
SLS_FETCH();
request_info.current_user = NULL;
request_info.current_user_length = 0;
- request_info.request_method = getenv("REQUEST_METHOD");
request_info.script_name = getenv("SCRIPT_NAME");
- buf = getenv("CONTENT_LENGTH");
- request_info.content_length = (buf ? atoi(buf) : 0);
- request_info.content_type = getenv("CONTENT_TYPE");
- request_info.cookies = getenv("HTTP_COOKIE");
request_info.script_filename = getenv("SCRIPT_FILENAME");
/* Hack for annoying servers that do not set SCRIPT_FILENAME for us */
if (!request_info.script_filename) {
@@ -110,13 +104,11 @@
request_info.current_user_length = 0;
request_info.filename = r->filename;
- request_info.request_method = r->method;
+ SG(request_info).request_method = r->method;
request_info.content_type = table_get(r->subprocess_env, "CONTENT_TYPE");
buf = table_get(r->subprocess_env, "CONTENT_LENGTH");
- request_info.content_length = (buf ? atoi(buf) : 0);
-
- request_info.cookies = table_get(r->subprocess_env, "HTTP_COOKIE");
+ SG(request_info).content_length = (buf ? atoi(buf) : 0);
return SUCCESS;
}
Index: php4/request_info.h
diff -u php4/request_info.h:1.4 php4/request_info.h:1.5
--- php4/request_info.h:1.4 Sun May 2 15:31:56 1999
+++ php4/request_info.h Sun May 9 04:47:48 1999
@@ -32,14 +32,9 @@
typedef struct {
char *filename;
- char *path_info;
- const char *request_method;
char *script_name;
char *current_user;
int current_user_length;
- unsigned int content_length;
- const char *content_type;
- const char *cookies;
const char *script_filename;
char *php_argv0;
} php3_request_info;
--
PHP 4 Beta