* 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.
}
+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 */
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 */
};
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);
}
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 */
php3_TreatHeaders();
- init_request_info(SLS_C);
if (!cgi) {
if (!SG(request_info).query_string) {
void php3_virtual(INTERNAL_FUNCTION_PARAMETERS);
void php3_getallheaders(INTERNAL_FUNCTION_PARAMETERS);
void php3_apachelog(INTERNAL_FUNCTION_PARAMETERS);
-void php3_info_apache(void);
+void php3_info_apache(ZEND_MODULE_INFO_FUNC_ARGS);
void php3_apache_note(INTERNAL_FUNCTION_PARAMETERS);
void php3_apache_lookup_uri(INTERNAL_FUNCTION_PARAMETERS);
}
/* }}} */
-void php3_info_apache(void) {
+void php3_info_apache(ZEND_MODULE_INFO_FUNC_ARGS) {
module *modp = NULL;
#if !defined(WIN32) && !defined(WINNT)
char name[64];
int php3_rinit_phpdav(INIT_FUNC_ARGS);
int php3_mshutdown_phpdav(SHUTDOWN_FUNC_ARGS);
int php3_rshutdown_phpdav(SHUTDOWN_FUNC_ARGS);
-void php3_info_phpdav(void);
+void php3_info_phpdav(ZEND_MODULE_INFO_FUNC_ARGS);
/* }}} */
/* {{{ extension definition structures */
/* }}} */
/* {{{ php3_info_phpdav() */
-void php3_info_phpdav()
+void php3_info_phpdav(ZEND_MODULE_INFO_FUNC_ARGS)
{
}
}
-void php3_info_db(void)
+void php3_info_db(ZEND_MODULE_INFO_FUNC_ARGS)
{
php3_printf(php3_get_info_db());
}
/* db file functions */
extern int php3_minit_db(INIT_FUNC_ARGS);
extern int php3_rinit_db(INIT_FUNC_ARGS);
-extern void php3_info_db(void);
+extern void php3_info_db(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_dblist(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_dbmopen(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_dbmclose(INTERNAL_FUNCTION_PARAMETERS);
return SUCCESS;
}
-void php3_info_fdf(void) {
+void php3_info_fdf(ZEND_MODULE_INFO_FUNC_ARGS) {
/* need to use a PHPAPI function here because it is external module in windows */
php3_printf("FdfTk Version %s", FDFGetVersion());
}
extern int php3_minit_fdf(INIT_FUNC_ARGS);
extern int php3_mend_fdf(void);
-extern void php3_info_fdf(void);
+extern void php3_info_fdf(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_fdf_open(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_fdf_close(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_fdf_create(INTERNAL_FUNCTION_PARAMETERS);
return SUCCESS;
}
-void php3_info_gd(void) {
+void php3_info_gd(ZEND_MODULE_INFO_FUNC_ARGS) {
/* need to use a PHPAPI function here because it is external module in windows */
#if HAVE_LIBGD13
php3_printf("Version 1.3");
"gettext", php3_gettext_functions, NULL, NULL, NULL, NULL, php3_info_gettext, STANDARD_MODULE_PROPERTIES
};
-void php3_info_gettext(void)
+void php3_info_gettext(ZEND_MODULE_INFO_FUNC_ARGS)
{
php3_printf("GNU gettext support active.");
}
extern php3_module_entry php3_gettext_module_entry;
#define php3_gettext_module_ptr &php3_gettext_module_entry
-extern void php3_info_gettext(void);
+extern void php3_info_gettext(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_textdomain(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_gettext(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_dgettext(INTERNAL_FUNCTION_PARAMETERS);
getenv("QUERY_STRING"));
#else
sprintf(cgi_env_str, "CGI_REQUEST_METHOD=%s\nCGI_PATH_INFO=%s\nCGI_QUERY_STRING=%s",
- request_info.request_method,
+ SG(request_info).request_method,
SG(request_info).request_uri,
SG(request_info).query_string);
#endif
getenv("QUERY_STRING"));
#else
sprintf(cgi_env_str, "CGI_REQUEST_METHOD=%s\nCGI_PATH_INFO=%s\nCGI_QUERY_STRING=%s",
- request_info.request_method,
+ SG(request_info).request_method,
SG(request_info).request_uri,
SG(request_info).query_string);
#endif
/* }}} */
-void php3_info_hw()
+void php3_info_hw(ZEND_MODULE_INFO_FUNC_ARGS)
{
php3_printf("HG-CSP Version: 7.17");
}
extern void php3_hw_objrec2array(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_hw_array2objrec(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_hw_connection_info(INTERNAL_FUNCTION_PARAMETERS);
-extern void php3_info_hw(void);
+extern void php3_info_hw(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_hw_getsrcbydestobj(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_hw_getrellink(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_hw_dummy(INTERNAL_FUNCTION_PARAMETERS);
extern int php3_minit_ifx(INIT_FUNC_ARGS);
extern int php3_rinit_ifx(INIT_FUNC_ARGS);
extern int php3_mshutdown_ifx(SHUTDOWN_FUNC_ARGS);
-extern void php3_info_ifx(void);
+extern void php3_info_ifx(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_ifx_connect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_ifx_pconnect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_ifx_close(INTERNAL_FUNCTION_PARAMETERS);
}
*/
-void php3_info_ibase(void)
+void php3_info_ibase(ZEND_MODULE_INFO_FUNC_ARGS)
{
/* TODO */
}
extern int php3_minit_ibase(INIT_FUNC_ARGS);
extern int php3_rinit_ibase(INIT_FUNC_ARGS);
extern int php3_mfinish_ibase(void);
-extern void php3_info_ibase(void);
+extern void php3_info_ibase(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_ibase_connect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_ibase_pconnect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_ibase_close(INTERNAL_FUNCTION_PARAMETERS);
return SUCCESS;
}
-void php3_info_ldap(void)
+void php3_info_ldap(ZEND_MODULE_INFO_FUNC_ARGS)
{
char maxl[16];
#if HAVE_NSLDAP
extern int php3_minit_ldap(INIT_FUNC_ARGS);
extern int php3_mshutdown_ldap(SHUTDOWN_FUNC_ARGS);
-extern void php3_info_ldap(void);
+extern void php3_info_ldap(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_ldap_connect(INTERNAL_FUNCTION_PARAMETERS);
return SUCCESS;
}
-DLEXPORT void php3_info_msql(void)
+DLEXPORT void php3_info_msql(ZEND_MODULE_INFO_FUNC_ARGS)
{
char maxp[16],maxl[16];
MSQL_TLS_VARS;
extern DLEXPORT int php3_minit_msql(INIT_FUNC_ARGS);
extern DLEXPORT int php3_rinit_msql(INIT_FUNC_ARGS);
extern DLEXPORT int php3_mshutdown_msql(SHUTDOWN_FUNC_ARGS);
-extern DLEXPORT void php3_info_msql(void);
+extern DLEXPORT void php3_info_msql(ZEND_MODULE_INFO_FUNC_ARGS);
extern DLEXPORT void php3_msql_connect(INTERNAL_FUNCTION_PARAMETERS);
extern DLEXPORT void php3_msql_pconnect(INTERNAL_FUNCTION_PARAMETERS);
extern DLEXPORT void php3_msql_close(INTERNAL_FUNCTION_PARAMETERS);
}
-void php3_info_mysql(void)
+void php3_info_mysql(ZEND_MODULE_INFO_FUNC_ARGS)
{
char maxp[16],maxl[16];
MySLS_FETCH();
extern int php3_minit_mysql(INIT_FUNC_ARGS);
extern int php3_rinit_mysql(INIT_FUNC_ARGS);
extern int php3_mshutdown_mysql(SHUTDOWN_FUNC_ARGS);
-extern void php3_info_mysql(void);
+extern void php3_info_mysql(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_mysql_connect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_mysql_pconnect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_mysql_close(INTERNAL_FUNCTION_PARAMETERS);
}
-void php3_info_odbc(void)
+void php3_info_odbc(ZEND_MODULE_INFO_FUNC_ARGS)
{
ODBC_TLS_VARS;
extern int php3_minit_odbc(INIT_FUNC_ARGS);
extern int php3_mshutdown_odbc(SHUTDOWN_FUNC_ARGS);
extern int php3_rinit_odbc(INIT_FUNC_ARGS);
-extern void php3_info_odbc(void);
+extern void php3_info_odbc(ZEND_MODULE_INFO_FUNC_ARGS);
extern PHP_FUNCTION(odbc_setoption);
extern PHP_FUNCTION(odbc_autocommit);
extern PHP_FUNCTION(odbc_close);
/* velocis.c functions */
extern int php3_minit_velocis(INIT_FUNC_ARGS);
extern int php3_rinit_velocis(INIT_FUNC_ARGS);
-extern void php3_info_velocis(void);
-extern int php3_shutdown_velocis(void);
+extern void php3_info_velocis(ZEND_MODULE_INFO_FUNC_ARGS);
+extern int php3_shutdown_velocis(SHUTDOWN_FUNC_ARGS);
extern void php3_velocis_connect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_velocis_close(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_velocis_exec(INTERNAL_FUNCTION_PARAMETERS);
}
-void php3_info_velocis(void)
+void php3_info_velocis(ZEND_MODULE_INFO_FUNC_ARGS)
{
php3_printf("RAIMA Velocis Support Active");
}
int php3_rinit_oci8(INIT_FUNC_ARGS);
int php3_mshutdown_oci8(SHUTDOWN_FUNC_ARGS);
int php3_rshutdown_oci8(SHUTDOWN_FUNC_ARGS);
-void php3_info_oci8(void);
+void php3_info_oci8(ZEND_MODULE_INFO_FUNC_ARGS);
static ub4 oci8_error(OCIError *err_p, char *what, sword status);
/* static int oci8_ping(oci8_connection *conn); XXX NYI */
}
-void php3_info_oci8()
+void php3_info_oci8(ZEND_MODULE_INFO_FUNC_ARGS)
{
#if !(WIN32|WINNT)
php3_printf("Oracle version: %s<br>\n"
}
/* }}} */
-void php3_info_oracle()
+void php3_info_oracle(ZEND_MODULE_INFO_FUNC_ARGS)
{
#if !(WIN32|WINNT)
php3_printf("Oracle version: %s<br>\n"
extern int php3_minit_oracle(INIT_FUNC_ARGS);
extern int php3_mshutdown_oracle(SHUTDOWN_FUNC_ARGS);
extern int php3_rshutdown_oracle(SHUTDOWN_FUNC_ARGS);
-extern void php3_info_oracle(void);
+extern void php3_info_oracle(ZEND_MODULE_INFO_FUNC_ARGS);
extern int php3_rinit_oracle(INIT_FUNC_ARGS);
#else
return SUCCESS;
}
-void php3_info_pdf(void) {
+void php3_info_pdf(ZEND_MODULE_INFO_FUNC_ARGS) {
/* need to use a PHPAPI function here because it is external module in windows */
php3_printf("%s. AFM files in %s", PDFLIB_VERSION, PDF_DEFAULT_FONT_PATH);
}
extern php3_module_entry pdf_module_entry;
#define pdf_module_ptr &pdf_module_entry
-extern void php3_info_pdf(void);
+extern void php3_info_pdf(ZEND_MODULE_INFO_FUNC_ARGS);
extern int php3_minit_pdf(INIT_FUNC_ARGS);
extern int php3_mend_pdf(void);
extern void php3_pdf_get_info(INTERNAL_FUNCTION_PARAMETERS);
{NULL, NULL, NULL}
};
+
+static void php_info_COM(ZEND_MODULE_INFO_FUNC_ARGS)
+{
+ DISPLAY_INI_ENTRIES();
+}
+
+
php3_module_entry COM_module_entry = {
- "Win32 COM", COM_functions, php3_minit_COM, php3_mshutdown_COM, NULL, NULL, NULL, STANDARD_MODULE_PROPERTIES
+ "Win32 COM", COM_functions, php3_minit_COM, php3_mshutdown_COM, NULL, NULL, php_info_COM, STANDARD_MODULE_PROPERTIES
};
void php_register_COM_class();
PHP_INI_BEGIN()
- PHP_INI_ENTRY1("allow_dcom", "0", PHP_INI_SYSTEM, NULL, NULL)
+ PHP_INI_ENTRY1_EX("allow_dcom", "0", PHP_INI_SYSTEM, NULL, NULL, php_ini_boolean_displayer_cb)
PHP_INI_ENTRY1("typelib_file", NULL, PHP_INI_SYSTEM, OnTypelibFileChange, NULL)
PHP_INI_END()
extern PHP_FUNCTION(snmpget);
extern PHP_FUNCTION(snmpwalk);
extern PHP_FUNCTION(snmprealwalk);
-extern void php3_info_snmp(void);
+extern void php3_info_snmp(ZEND_MODULE_INFO_FUNC_ARGS);
#else
#define snmp_module_ptr NULL
return SUCCESS;
}
-void php3_info_snmp(void) {
+void php3_info_snmp(ZEND_MODULE_INFO_FUNC_ARGS) {
php3_printf("ucd-snmp");
}
}
-void php3_info_dl(void)
+void php3_info_dl(ZEND_MODULE_INFO_FUNC_ARGS)
{
PUTS("Dynamic Library support enabled.\n");
}
extern int php3_minit_dl(INIT_FUNC_ARGS);
extern int php3_mshutdown_dl(SHUTDOWN_FUNC_ARGS);
extern int php3_rshutdown_dl(SHUTDOWN_FUNC_ARGS);
-extern void php3_info_dl(void);
+extern void php3_info_dl(ZEND_MODULE_INFO_FUNC_ARGS);
#else
}
-#ifdef APACHE
+#if 0
/* Adds header information */
void php4i_add_header_information(char *header_information, uint header_length)
{
-#ifdef APACHE
+#if 0
/*
* php3_header() flushes the header info built up using calls to
* the Header() function. If type is 1, a redirect to str is done.
/* php3_SetCookie(name,value,expires,path,domain,secure) */
void php3_SetCookie(INTERNAL_FUNCTION_PARAMETERS)
{
-#if !APACHE
- char *tempstr;
-#if FHTTPD
- char *tempstr1;
-#endif
- int len=0;
+ char *cookie;
+ int len=sizeof("Set-Cookie: ");
time_t t;
char *r, *dt;
-#endif
char *name = NULL, *value = NULL, *path = NULL, *domain = NULL;
time_t expires = 0;
int secure = 0;
case 6:
convert_to_boolean(arg[5]);
secure = arg[5]->value.lval;
+ /* break missing intentionally */
case 5:
convert_to_string(arg[4]);
domain = estrndup(arg[4]->value.str.val,arg[4]->value.str.len);
+ /* break missing intentionally */
case 4:
convert_to_string(arg[3]);
path = estrndup(arg[3]->value.str.val,arg[3]->value.str.len);
+ /* break missing intentionally */
case 3:
convert_to_long(arg[2]);
expires = arg[2]->value.lval;
+ /* break missing intentionally */
case 2:
convert_to_string(arg[1]);
value = estrndup(arg[1]->value.str.val,arg[1]->value.str.len);
+ /* break missing intentionally */
case 1:
convert_to_string(arg[0]);
name = estrndup(arg[0]->value.str.val,arg[0]->value.str.len);
+ break;
}
-#if APACHE
+#if 0
php3_PushCookieList(name, value, expires, path, domain, secure);
#else
- if (name) len += strlen(name);
- if (value) len += strlen(value);
- if (path) len += strlen(path);
- if (domain) len += strlen(domain);
- tempstr = emalloc(len + 100);
+ if (name) {
+ len += strlen(name);
+ }
+ if (value) {
+ len += strlen(value);
+ }
+ if (path) {
+ len += strlen(path);
+ }
+ if (domain) {
+ len += strlen(domain);
+ }
+ cookie = emalloc(len + 100);
if (!value || (value && !*value)) {
/*
* MSIE doesn't delete a cookie when you set it to a null value
* so in order to force cookies to be deleted, even on MSIE, we
* pick an expiry date 1 year and 1 second in the past
*/
- sprintf(tempstr, "%s=deleted", name);
- strcat(tempstr, "; expires=");
+ sprintf(cookie, "Set-Cookie: %s=deleted", name);
+ strcat(cookie, "; expires=");
t = time(NULL) - 31536001;
dt = php3_std_date(t);
- strcat(tempstr, dt);
+ strcat(cookie, dt);
efree(dt);
} else {
/* FIXME: XXX: this is not binary data safe */
r = _php3_urlencode(value, strlen (value));
- sprintf(tempstr, "%s=%s", name, value ? r : "");
+ sprintf(cookie, "Set-Cookie: %s=%s", name, value ? r : "");
if (r) efree(r);
if (value) efree(value);
value=NULL;
if (name) efree(name);
name=NULL;
if (expires > 0) {
- strcat(tempstr, "; expires=");
+ strcat(cookie, "; expires=");
dt = php3_std_date(expires);
- strcat(tempstr, dt);
+ strcat(cookie, dt);
efree(dt);
}
}
if (path && strlen(path)) {
- strcat(tempstr, "; path=");
- strcat(tempstr, path);
+ strcat(cookie, "; path=");
+ strcat(cookie, path);
efree(path);
path=NULL;
}
if (domain && strlen(domain)) {
- strcat(tempstr, "; domain=");
- strcat(tempstr, domain);
+ strcat(cookie, "; domain=");
+ strcat(cookie, domain);
efree(domain);
domain=NULL;
}
if (secure) {
- strcat(tempstr, "; secure");
+ strcat(cookie, "; secure");
}
-#if USE_SAPI
- {
- char *tempstr2=emalloc(strlen(tempstr)+14);
- sprintf(tempstr2,"Set-Cookie: %s\015\012",tempstr);
- sapi_rqst->header(sapi_rqst->scid,tempstr2);
- efree(tempstr2);
+
+
+ if (sapi_add_header(cookie, strlen(cookie))==SUCCESS) {
+ RETVAL_TRUE;
+ } else {
+ RETVAL_FALSE;
}
-#elif FHTTPD
- tempstr1 = emalloc(strlen(tempstr)
- + sizeof("Set-Cookie: ") + 2);
- if(tempstr1) {
- strcpy(tempstr1, "Set-Cookie: ");
- strcpy(tempstr1 + sizeof("Set-Cookie: ") - 1, tempstr);
- strcat(tempstr1, "\r\n");
- php3_fhttpd_puts_header(tempstr1);
- efree(tempstr1);
+
+ if (domain) {
+ efree(domain);
+ }
+ if (path) {
+ efree(path);
+ }
+ if (name) {
+ efree(name);
+ }
+ if (value) {
+ efree(value);
}
-#else
- PUTS_H("Set-Cookie: ");
- PUTS_H(tempstr);
- PUTS_H("\015\012");
-#endif
- if (domain) efree(domain);
- if (path) efree(path);
- if (name) efree(name);
- if (value) efree(value);
- efree(tempstr);
#endif
}
#include "zend_globals.h" /* needs ELS */
-#define PHP3_CONF_STR(directive,value1,value2) \
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">"); \
- PUTS(directive); \
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\"> "); \
- if (value1) PUTS(value1); \
- else PUTS("<i>none</i>"); \
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\"> "); \
- if (value2) PUTS(value2); \
- else PUTS("<i>none</i>"); \
- PUTS("</td></tr>\n");
-
#define PHP3_CONF_LONG(directive,value1,value2) \
php3_printf("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">%s</td><td bgcolor=\"" CONTENTS_COLOR "\">%ld</td><td bgcolor=\"" CONTENTS_COLOR "\">%ld</td></tr>\n",directive,value1,value2);
#define CONTENTS_COLOR "#DDDDDD"
#define HEADER_COLOR "#00DDDD"
+#define CREDIT_LINE(module, authors) php_info_print_table_row(2, module, authors)
+
+
static int _display_module_info(php3_module_entry *module)
{
- PUTS("<tr><th align=left bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS(module->name);
- PUTS("</th><td bgcolor=\"" CONTENTS_COLOR "\">");
if (module->info_func) {
- module->info_func();
- } else {
- PUTS("No additional information.");
+ php3_printf("<hr><h2>%s</h2>\n", module->name);
+ module->info_func(module);
}
- PUTS("</td></tr>\n");
return 0;
}
#endif
- PUTS("<img src=\"");
+ php3_printf("<center><h1>PHP Version %s</h1></center>\n", PHP_VERSION);
+
+ PUTS("<hr><a href=\"http://www.php.net/\"><img src=\"");
if (SG(request_info).request_uri) {
PUTS(SG(request_info).request_uri);
}
- PUTS("?=PHPE9568F34-D428-11d2-A769-00AA001ACF42\" border=\"0\" width=\"100\" height=\"56\" align=\"right\">\n");
- php3_printf("<center><h1>PHP Version %s</h1></center>\n", PHP_VERSION);
- PUTS("<p>by <a href=\"mailto:rasmus@lerdorf.on.ca\">Rasmus Lerdorf</a>,\n");
- PUTS("<a href=\"mailto:andi@zend.com\">Andi Gutmans</a>,\n");
- PUTS("<a href=\"mailto:zeev@zend.com\">Zeev Suraski</a>,\n");
- PUTS("<a href=\"mailto:ssb@guardian.no\">Stig Bakken</a>,\n");
- PUTS("<a href=\"mailto:shane@caraveo.com\">Shane Caraveo</a>,\n");
- PUTS("<a href=\"mailto:jimw@php.net\">Jim Winstead</a>, and countless others.</P>\n");
-
- PUTS("<P><a href=\"http://www.zend.com/\">Zend</a>:</a> ");
- PUTS("<a href=\"mailto:andi@zend.com\">Andi Gutmans</a> and \n");
- PUTS("<a href=\"mailto:zeev@zend.com\">Zeev Suraski</a></p>\n");
-
- PUTS("<hr>");
- php3_printf("<center>System: %s<br>Build Date: %s</center>\n", php3_uname, __DATE__);
- PUTS("<center>\n");
-
- SECTION("Extensions");
- PUTS("<table border=5 width=\"600\">\n");
- PUTS("<tr><th bgcolor=\"" HEADER_COLOR "\">Extensions</th><th bgcolor=\"" HEADER_COLOR "\">Additional Information</th></tr>\n");
+ PUTS("?=PHPE9568F34-D428-11d2-A769-00AA001ACF42\" border=\"0\" width=\"100\" height=\"56\" align=\"right\"></a>\n");
+ php3_printf("System: %s<br>Build Date: %s\n<br>", php3_uname, __DATE__);
+ php3_printf("php3.ini path: %s<br>\n", CONFIGURATION_FILE_PATH);
+
+ /* Zend Engine */
+ PUTS("<hr><a href=\"http://www.zend.com/\"><img src=\"");
+ if (SG(request_info).request_uri) {
+ PUTS(SG(request_info).request_uri);
+ }
+ PUTS("?=PHPE9568F35-D428-11d2-A769-00AA001ACF42\" border=\"0\" width=\"100\" height=\"89\" align=\"right\"></a>\n");
+ php3_printf("This program makes use of the Zend scripting language engine:<br><pre>%s</pre>", get_zend_version());
+
+
+ PUTS("<center>");
-#ifndef MSVC5
- PUTS("<tr><th align=left bgcolor=\"" ENTRY_NAME_COLOR "\">PHP core</th>\n");
- PUTS("<td bgcolor=\"" CONTENTS_COLOR "\"><tt>CFLAGS=" PHP_CFLAGS "<br>\n");
- PUTS("HSREGEX=" PHP_HSREGEX "</td></tr>\n");
-#endif
+ PUTS("<hr><h1>Credits</h1>\n");
- _php3_hash_apply(&module_registry,(int (*)(void *))_display_module_info);
+ PUTS("<table border=5 width=\"600\">\n");
+ PUTS("<tr><th colspan=\"2\" bgcolor=\"" HEADER_COLOR "\">PHP 4.0 Authors</th></tr>\n");
+ php_info_print_table_header(2, "Module", "Authors");
+ CREDIT_LINE("Scripting Language Engine", "Andi Gutmans, Zeev Suraski");
+ CREDIT_LINE("Extension Module API", "Andi Gutmans, Zeev Suraski");
+ CREDIT_LINE("UNIX Build and Modularization", "Stig Bakken");
+ CREDIT_LINE("Win32 Port", "Shane Caraveo, Zeev Suraski");
+ CREDIT_LINE("Server API (SAPI) Abstraction Layer", "Andi Gutmans, Shane Caraveo, Zeev Suraski");
+ CREDIT_LINE("Apache SAPI Module", "Rasmus Lerdorf, Zeev Suraski");
+ CREDIT_LINE("ISAPI SAPI Module", "Andi Gutmans, Zeev Suraski");
+ CREDIT_LINE("CGI SAPI Module", "Rasmus Lerdorf, Stig Bakken");
PUTS("</table>\n");
- SECTION("Configuration");
- PUTS("php3.ini file path is set to: ");
- PUTS(CONFIGURATION_FILE_PATH);
- PUTS("<br>\n");
- PUTS("<table border=5 width=\"600\">\n");
- PUTS("<tr><th bgcolor=\"" HEADER_COLOR "\">Directive</th><th bgcolor=\"" HEADER_COLOR "\">Master Value</th><th bgcolor=\"" HEADER_COLOR "\">Local Value</th></tr>\n");
- PHP3_CONF_STR("arg_separator", INI_ORIG_STR("arg_separator"), PG(arg_separator));
- PHP3_CONF_LONG("asp_tags", INI_ORIG_INT("asp_tags"), PG(asp_tags));
- PHP3_CONF_STR("auto_prepend_file", INI_ORIG_STR("auto_prepend_file"), PG(auto_prepend_file));
- PHP3_CONF_STR("auto_append_file", INI_ORIG_STR("auto_append_file"), PG(auto_append_file));
- PHP3_CONF_STR("browscap", INI_ORIG_STR("browscap"), INI_STR("browscap"));
- PHP3_CONF_LONG("define_syslog_variables", INI_ORIG_STR("define_syslog_variables"), INI_STR("define_syslog_variables"));
- PHP3_CONF_LONG("display_errors", INI_ORIG_INT("display_errors"), PG(display_errors));
- PHP3_CONF_STR("doc_root", INI_ORIG_STR("doc_root"), PG(doc_root));
- PHP3_CONF_LONG("enable_dl", INI_ORIG_INT("enable_dl"), PG(enable_dl));
- PHP3_CONF_STR("error_log", INI_ORIG_STR("error_log"), PG(error_log));
- PHP3_CONF_STR("error_prepend_string", INI_ORIG_STR("error_prepend_string"), INI_STR("error_prepend_string"));
- PHP3_CONF_STR("error_append_string", INI_ORIG_STR("error_append_string"), INI_STR("error_append_string"));
- PHP3_CONF_LONG("error_reporting", INI_ORIG_INT("error_reporting"), EG(error_reporting));
- PHP3_CONF_STR("extension_dir", INI_ORIG_STR("extension_dir"), PG(extension_dir));
- PHP3_CONF_STR("gpc_order", INI_ORIG_STR("gpc_order"), PG(gpc_order));
- PHP3_CONF_STR("include_path", INI_ORIG_STR("include_path"), PG(include_path));
- PHP3_CONF_LONG("log_errors", INI_ORIG_INT("log_errors"), PG(log_errors));
- PHP3_CONF_LONG("max_execution_time", INI_ORIG_INT("max_execution_time"), PG(max_execution_time));
- PHP3_CONF_LONG("magic_quotes_gpc", INI_ORIG_INT("magic_quotes_gpc"), PG(magic_quotes_gpc));
- PHP3_CONF_LONG("magic_quotes_runtime", INI_ORIG_INT("magic_quotes_runtime"), PG(magic_quotes_runtime));
- PHP3_CONF_LONG("magic_quotes_sybase", INI_ORIG_INT("magic_quotes_sybase"), PG(magic_quotes_sybase));
- PHP3_CONF_LONG("memory limit", INI_ORIG_INT("memory_limit"), PG(memory_limit));
- PHP3_CONF_STR("open_basedir", INI_ORIG_STR("open_basedir"), PG(open_basedir));
- PHP3_CONF_LONG("precision", INI_ORIG_INT("precision"), EG(precision));
- PHP3_CONF_LONG("safe_mode", INI_ORIG_INT("safe_mode"), PG(safe_mode));
- PHP3_CONF_STR("safe_mode_exec_dir", INI_ORIG_STR("safe_mode_exec_dir"), PG(safe_mode_exec_dir));
- PHP3_CONF_STR("sendmail_from", INI_ORIG_STR("sendmail_from"), INI_STR("sendmail_from"));
- PHP3_CONF_STR("sendmail_path", INI_ORIG_STR("sendmail_path"), INI_STR("sendmail_path"));
- PHP3_CONF_LONG("short_open_tag", INI_ORIG_INT("short_open_tag"), PG(short_tags));
- PHP3_CONF_STR("SMTP", INI_ORIG_STR("SMTP"), INI_STR("SMTP"));
- PHP3_CONF_LONG("sql_safe_mode", INI_ORIG_INT("sql.safe_mode"), PG(sql_safe_mode));
- PHP3_CONF_LONG("track_errors", INI_ORIG_INT("track_errors"), PG(track_errors));
- PHP3_CONF_LONG("track_vars", INI_ORIG_INT("track_vars"), PG(track_vars));
- PHP3_CONF_LONG("upload_max_filesize", INI_ORIG_INT("upload_max_filesize"), PG(upload_max_filesize));
- PHP3_CONF_STR("upload_tmp_dir", INI_ORIG_STR("upload_tmp_dir"), PG(upload_tmp_dir));
- PHP3_CONF_STR("user_dir", INI_ORIG_STR("user_dir"), PG(user_dir));
- PHP3_CONF_LONG("y2k_compliance", INI_ORIG_INT("y2k_compliance"), PG(y2k_compliance));
+
+ PUTS("<hr><h1>Configuraton</h1>\n");
+ PUTS("<h2>PHP Core</h2>\n");
+ display_ini_entries(NULL);
+ _php3_hash_apply(&module_registry,(int (*)(void *)) _display_module_info);
+
+#if 0
/* apache only directives */
PHP3_CONF_LONG("engine", INI_ORIG_INT("engine"), INI_INT("engine")); /* apache only */
PHP3_CONF_LONG("xbithack", INI_ORIG_INT("xbithack"), INI_INT("xbithack")); /* apache only */
PHP3_CONF_LONG("last_modified", INI_ORIG_INT("last_modified"), INI_INT("last_modified")); /* apache only */
/* end of apache only directives */
-
- /* And now for the highlight colours */
- php3_printf("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">highlight_comment</td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td></tr>\n",INI_ORIG_STR("highlight.comment"), INI_ORIG_STR("highlight.comment"), INI_STR("highlight.comment"), INI_STR("highlight.comment"));
- php3_printf("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">highlight_default</td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td></tr>\n",INI_ORIG_STR("highlight.default"), INI_ORIG_STR("highlight.default"), INI_STR("highlight.default"), INI_STR("highlight.default"));
- php3_printf("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">highlight_html</td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td></tr>\n",INI_ORIG_STR("highlight.html"), INI_ORIG_STR("highlight.html"), INI_STR("highlight.html"), INI_STR("highlight.html"));
- php3_printf("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">highlight_string</td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td></tr>\n",INI_ORIG_STR("highlight.string"), INI_ORIG_STR("highlight.string"), INI_STR("highlight.string"), INI_STR("highlight.string"));
- php3_printf("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">highlight_bg</td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td></tr>\n",INI_ORIG_STR("highlight.bg"), INI_ORIG_STR("highlight.bg"), INI_STR("highlight.bg"), INI_STR("highlight.bg"));
- php3_printf("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">highlight_keyword</td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td><td bgcolor=\"" CONTENTS_COLOR "\"><font color=%s> %s</font></td></tr>\n",INI_ORIG_STR("highlight.keyword"), INI_ORIG_STR("highlight.keyword"), INI_STR("highlight.keyword"), INI_STR("highlight.keyword"));
- PUTS("</table>");
-
-#if USE_SAPI /* call a server module specific info function */
- sapi_rqst->info(sapi_rqst);
#endif
SECTION("Environment");
PUTS("<table border=5 width=\"600\">\n");
- PUTS("<tr><th bgcolor=\"" HEADER_COLOR "\">Variable</th><th bgcolor=\"" HEADER_COLOR "\">Value</th></tr>\n");
+ php_info_print_table_header(2, "Variable", "Value");
for (env=environ; env!=NULL && *env !=NULL; env++) {
tmp1 = estrdup(*env);
if (!(tmp2=strchr(tmp1,'='))) { /* malformed entry? */
}
*tmp2 = 0;
tmp2++;
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS(tmp1);
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- if (tmp2 && *tmp2) {
- PUTS(tmp2);
- } else {
- PUTS(" ");
- }
- PUTS("</td></tr>\n");
+ php_info_print_table_row(2, tmp1, tmp2);
efree(tmp1);
}
PUTS("</table>\n");
SECTION("PHP Variables");
PUTS("<table border=5 width=\"600\">\n");
- PUTS("<tr><th bgcolor=\"" HEADER_COLOR "\">Variable</th><th bgcolor=\"" HEADER_COLOR "\">Value</th></tr>\n");
+ php_info_print_table_header(2, "Variable", "Value");
if (_php3_hash_find(&EG(symbol_table), "PHP_SELF", sizeof("PHP_SELF"), (void **) &data) != FAILURE) {
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS("PHP_SELF");
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- PUTS((*data)->value.str.val);
- PUTS("</td></tr>\n");
+ php_info_print_table_row(2, "PHP_SELF", (*data)->value.str.val);
}
if (_php3_hash_find(&EG(symbol_table), "PHP_AUTH_TYPE", sizeof("PHP_AUTH_TYPE"), (void **) &data) != FAILURE) {
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS("PHP_AUTH_TYPE");
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- PUTS((*data)->value.str.val);
- PUTS("</td></tr>\n");
+ php_info_print_table_row(2, "PHP_AUTH_TYPE", (*data)->value.str.val);
}
if (_php3_hash_find(&EG(symbol_table), "PHP_AUTH_USER", sizeof("PHP_AUTH_USER"), (void **) &data) != FAILURE) {
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS("PHP_AUTH_USER");
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- PUTS((*data)->value.str.val);
- PUTS("</td></tr>\n");
+ php_info_print_table_row(2, "PHP_AUTH_USER", (*data)->value.str.val);
}
if (_php3_hash_find(&EG(symbol_table), "PHP_AUTH_PW", sizeof("PHP_AUTH_PW"), (void **) &data) != FAILURE) {
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS("PHP_AUTH_PW");
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- PUTS((*data)->value.str.val);
- PUTS("</td></tr>\n");
+ php_info_print_table_row(2, "PHP_AUTH_PW", (*data)->value.str.val);
}
if (_php3_hash_find(&EG(symbol_table), "HTTP_GET_VARS", sizeof("HTTP_GET_VARS"), (void **) &data) != FAILURE) {
_php3_hash_internal_pointer_reset((*data)->value.ht);
SECTION("Apache Environment");
PUTS("<table border=5 width=\"600\">\n");
- PUTS("<tr><th bgcolor=\"" HEADER_COLOR "\">Variable</th><th bgcolor=\"" HEADER_COLOR "\">Value</th></tr>\n");
+ php_info_print_table_header(2, "Variable", "Value");
for (i=0; i < arr->nelts; i++) {
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS(elts[i].key);
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- PUTS(elts[i].val);
- PUTS(" </td></tr>\n");
+ php_info_print_table_row(2, elts[i].key, elts[i].val);
}
PUTS("</table>\n");
}
SECTION("HTTP Headers Information");
PUTS("<table border=5 width=\"600\">\n");
PUTS(" <tr><th colspan=2 bgcolor=\"" HEADER_COLOR "\">HTTP Request Headers</th></tr>\n");
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">HTTP Request</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- PUTS(r->the_request);
- PUTS(" </td></tr>\n");
+ php_info_print_table_row(2, "HTTP Request", r->the_request);
env_arr = table_elts(r->headers_in);
env = (table_entry *)env_arr->elts;
for (i = 0; i < env_arr->nelts; ++i) {
if (env[i].key) {
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS(env[i].key);
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- PUTS(env[i].val);
- PUTS(" </td></tr>\n");
+ php_info_print_table_row(2, env[i].key, env[i].val);
}
}
PUTS(" <tr><th colspan=2 bgcolor=\"" HEADER_COLOR "\">HTTP Response Headers</th></tr>\n");
env = (table_entry *)env_arr->elts;
for(i = 0; i < env_arr->nelts; ++i) {
if (env[i].key) {
- PUTS("<tr><td bgcolor=\"" ENTRY_NAME_COLOR "\">");
- PUTS(env[i].key);
- PUTS("</td><td bgcolor=\"" CONTENTS_COLOR "\">");
- PUTS(env[i].val);
- PUTS(" </td></tr>\n");
+ php_info_print_table_row(2, env[i].key, env[i].val);
}
}
PUTS("</table>\n\n");
PUTS("</center>");
- PUTS("<hr>\n");
- PUTS("<table width=\"100%%\"><tr>\n");
- php3_printf("<td><h2>Zend</h2>This program makes use of the Zend scripting language engine:<br><pre>%s</pre></td>", get_zend_version());
- PUTS("<td width=\"100\"><a href=\"http://www.zend.com/\"><img src=\"");
- if (SG(request_info).request_uri) {
- PUTS(SG(request_info).request_uri);
- }
- PUTS("?=PHPE9568F35-D428-11d2-A769-00AA001ACF42\" border=\"0\" width=\"100\" height=\"89\"></a></td>\n");
- PUTS("</tr></table>\n");
SECTION("PHP License");
PUTS("<PRE>This program is free software; you can redistribute it and/or modify\n");
}
+
+PHPAPI void php_info_print_table_header(int num_cols, ...)
+{
+ int i;
+ va_list row_elements;
+ char *row_element;
+
+ va_start(row_elements, num_cols);
+
+ php3_printf("<tr>");
+ for (i=0; i<num_cols; i++) {
+ row_element = va_arg(row_elements, char *);
+ if (!row_element || !*row_element) {
+ row_element = " ";
+ }
+ php3_printf("<th bgcolor=\"" HEADER_COLOR "\" valign=\"top\">%s</th>", row_element);
+ }
+ php3_printf("</tr>\n");
+
+ va_end(row_elements);
+}
+
+
+PHPAPI void php_info_print_table_row(int num_cols, ...)
+{
+ int i;
+ va_list row_elements;
+ char *color = ENTRY_NAME_COLOR;
+ char *row_element;
+
+ va_start(row_elements, num_cols);
+
+ php3_printf("<tr>");
+ for (i=0; i<num_cols; i++) {
+ row_element = va_arg(row_elements, char *);
+ if (!row_element || !*row_element) {
+ row_element = " ";
+ }
+ php3_printf("<td bgcolor=\"%s\" valign=\"top\">%s</td>", color, row_element);
+ color = CONTENTS_COLOR;
+ }
+ php3_printf("</tr>\n");
+
+ va_end(row_elements);
+}
+
+
/* {{{ proto void phpinfo(void)
Output a page of useful information about PHP and the current request */
void php3_info(INTERNAL_FUNCTION_PARAMETERS)
#ifndef _INFO_H
#define _INFO_H
-extern void php3_version(INTERNAL_FUNCTION_PARAMETERS);
-extern void php3_info(INTERNAL_FUNCTION_PARAMETERS);
-
+void php3_version(INTERNAL_FUNCTION_PARAMETERS);
+void php3_info(INTERNAL_FUNCTION_PARAMETERS);
PHPAPI void _php3_info(void);
+PHPAPI void php_info_print_table_header(int num_cols, ...);
+PHPAPI void php_info_print_table_row(int num_cols, ...);
+
#endif /* _INFO_H */
return 1;
}
-void php3_info_mail(void)
+void php3_info_mail(ZEND_MODULE_INFO_FUNC_ARGS)
{
#if MSVC5
PUTS("Internal Sendmail support for Windows 4");
#else
void php3_mail(INTERNAL_FUNCTION_PARAMETERS) {}
-void php3_info_mail() {}
+void php3_info_mail(ZEND_MODULE_INFO_FUNC_ARGS) {}
#endif
#define mail_module_ptr &mail_module_entry
extern void php3_mail(INTERNAL_FUNCTION_PARAMETERS);
-extern void php3_info_mail(void);
+extern void php3_info_mail(ZEND_MODULE_INFO_FUNC_ARGS);
extern int _php3_mail(char *to, char *subject, char *message, char *headers);
#else
* This reads the post form data into a string.
* Remember to free this pointer when done with it.
*/
+#if APACHE
static char *php3_getpost(pval *http_post_vars PLS_DC)
{
char *buf = NULL;
#endif
return (buf);
}
+#else
+static char *php3_getpost(pval *http_post_vars PLS_DC)
+{
+ SLS_FETCH();
+
+ return SG(request_info).post_data;
+}
+#endif
/*
res = (char *) estrdup(var);
}
} else if (arg == PARSE_COOKIE) { /* Cookie data */
- var = (char *)request_info.cookies;
+ var = SG(request_info).cookie_data;
if (var && *var) {
res = (char *) estrdup(var);
}
extern int php3_rinit_sybct(INIT_FUNC_ARGS);
extern int php3_mshutdown_sybct(SHUTDOWN_FUNC_ARGS);
extern int php3_rshutdown_sybct(SHUTDOWN_FUNC_ARGS);
-extern void php3_info_sybct(void);
+extern void php3_info_sybct(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_sybct_connect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_sybct_pconnect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_sybct_close(INTERNAL_FUNCTION_PARAMETERS);
extern int php3_rinit_sybase(INIT_FUNC_ARGS);
extern int php3_mshutdown_sybase(SHUTDOWN_FUNC_ARGS);
extern int php3_rshutdown_sybase(SHUTDOWN_FUNC_ARGS);
-extern void php3_info_sybase(void);
+extern void php3_info_sybase(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_sybase_connect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_sybase_pconnect(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_sybase_close(INTERNAL_FUNCTION_PARAMETERS);
}
-void php3_info_sybct(void)
+void php3_info_sybct(ZEND_MODULE_INFO_FUNC_ARGS)
{
char maxp[16],maxl[16];
}
-void php3_info_sybase(void)
+void php3_info_sybase(ZEND_MODULE_INFO_FUNC_ARGS)
{
char maxp[16],maxl[16];
int php3_rinit_xml(INIT_FUNC_ARGS);
int php3_mshutdown_xml(SHUTDOWN_FUNC_ARGS);
int php3_rshutdown_xml(SHUTDOWN_FUNC_ARGS);
-void php3_info_xml(void);
+void php3_info_xml(ZEND_MODULE_INFO_FUNC_ARGS);
static xml_parser *xml_get_parser(int, const char *, HashTable *);
static void xml_destroy_parser(xml_parser *);
/* }}} */
/* {{{ php3_info_xml() */
-void php3_info_xml()
+void php3_info_xml(ZEND_MODULE_INFO_FUNC_ARGS)
{
PUTS("XML support active");
}
extern int php3_minit_zlib(INIT_FUNC_ARGS);
extern int php3_mshutdown_zlib(SHUTDOWN_FUNC_ARGS);
-extern void php3_info_zlib(void);
+extern void php3_info_zlib(ZEND_MODULE_INFO_FUNC_ARGS);
extern void php3_gzopen(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_gzclose(INTERNAL_FUNCTION_PARAMETERS);
extern void php3_gzeof(INTERNAL_FUNCTION_PARAMETERS);
return SUCCESS;
}
-void php3_info_zlib(void)
+void php3_info_zlib(ZEND_MODULE_INFO_FUNC_ARGS)
{
PUTS("Zlib support active (compiled with ");
PUTS(ZLIB_VERSION);
+----------------------------------------------------------------------+
| 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> |
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);
}
}
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;
}
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 = ':';
}
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));
typedef struct {
zend_llist headers;
- sapi_header_struct content_type;
int http_response_code;
+ unsigned char send_default_content_type;
} sapi_headers_struct;
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;
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);
};
# 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)
+ 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_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)
+ 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)
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()
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;
wVersionRequested = MAKEWORD(2, 0);
#endif
+ SG(server_context) = NULL;
+ sapi_activate(SLS_C);
if (module_initialized) {
return SUCCESS;
#endif
PG(header_is_being_sent) = 0;
+ SG(request_info).headers_only = 0;
#if HAVE_SETLOCALE
setlocale(LC_CTYPE, "");
return FAILURE;
}
module_initialized = 1;
+ sapi_deactivate(SLS_C);
return SUCCESS;
}
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;
}
#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;
* 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;
}
-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;
}
-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;
}
+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;
}
-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;
}
-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;
-/* Standard message handlers for core_globals */
+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 */
PHP_INI_MH(OnUpdateInt)
{
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;
char *orig_value;
uint orig_value_length;
int modified;
+
+ void (*displayer)(php_ini_entry *ini_entry, int type);
};
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);
+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);
-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_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)
#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);
PHP_INI_MH(OnUpdateString);
PHP_INI_MH(OnUpdateStringUnempty);
+
+#define PHP_INI_DISPLAY_ORIG 1
+#define PHP_INI_DISPLAY_ACTIVE 2
+
#endif /* _PHP_INI_H */
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"
}
+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 */
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 */
};
#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) {
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;
}
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;