diff options
author | Zeev Suraski <zeev@php.net> | 1999-05-09 08:48:05 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 1999-05-09 08:48:05 +0000 |
commit | bc415d5a8883bbe5b15c12e9a30f916c8010204a (patch) | |
tree | 216499649825b9005a59c0e3c5b5be67c2092871 | |
parent | 91cf2e59c47a30f075fe1c69d17550b956df9865 (diff) | |
download | php-git-bc415d5a8883bbe5b15c12e9a30f916c8010204a.tar.gz |
* 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.
56 files changed, 540 insertions, 344 deletions
diff --git a/cgi_main.c b/cgi_main.c index fa438d6eac..e34d0e7e37 100644 --- a/cgi_main.c +++ b/cgi_main.c @@ -85,6 +85,29 @@ static void sapi_cgi_send_header(sapi_header_struct *sapi_header, void *server_c } +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 @@ static sapi_module_struct sapi_module = { 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 php_cgi_usage(char *argv0) 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 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine 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 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine php3_TreatHeaders(); - init_request_info(SLS_C); if (!cgi) { if (!SG(request_info).query_string) { diff --git a/ext/apache/apache.c b/ext/apache/apache.c index c5085f749e..d3a390eba6 100644 --- a/ext/apache/apache.c +++ b/ext/apache/apache.c @@ -54,7 +54,7 @@ extern module *top_module; 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); @@ -154,7 +154,7 @@ void php3_apache_note(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]; diff --git a/ext/dav/dav.c b/ext/dav/dav.c index 967b1a6757..6f00f0b1d4 100644 --- a/ext/dav/dav.c +++ b/ext/dav/dav.c @@ -91,7 +91,7 @@ int php3_minit_phpdav(INIT_FUNC_ARGS); 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 */ @@ -186,7 +186,7 @@ int php3_rshutdown_phpdav(SHUTDOWN_FUNC_ARGS) /* }}} */ /* {{{ php3_info_phpdav() */ -void php3_info_phpdav() +void php3_info_phpdav(ZEND_MODULE_INFO_FUNC_ARGS) { } diff --git a/ext/db/db.c b/ext/db/db.c index 70ba058b03..ef1502a7f2 100644 --- a/ext/db/db.c +++ b/ext/db/db.c @@ -251,7 +251,7 @@ static char *php3_get_info_db(void) } -void php3_info_db(void) +void php3_info_db(ZEND_MODULE_INFO_FUNC_ARGS) { php3_printf(php3_get_info_db()); } diff --git a/ext/db/php3_db.h b/ext/db/php3_db.h index ded7774ffd..08039d5640 100644 --- a/ext/db/php3_db.h +++ b/ext/db/php3_db.h @@ -76,7 +76,7 @@ char *_php3_dbmnextkey(dbm_info *info, char *key); /* 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); diff --git a/ext/fdf/fdf.c b/ext/fdf/fdf.c index e16b6bcb82..e0a0a55a00 100644 --- a/ext/fdf/fdf.c +++ b/ext/fdf/fdf.c @@ -109,7 +109,7 @@ int php3_minit_fdf(INIT_FUNC_ARGS) 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()); } diff --git a/ext/fdf/php3_fdf.h b/ext/fdf/php3_fdf.h index 08f7bee509..4a83c62468 100644 --- a/ext/fdf/php3_fdf.h +++ b/ext/fdf/php3_fdf.h @@ -44,7 +44,7 @@ extern php3_module_entry fdf_module_entry; 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); diff --git a/ext/gd/gd.c b/ext/gd/gd.c index eafea09750..f71b129a17 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -178,7 +178,7 @@ int php3_minit_gd(INIT_FUNC_ARGS) 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"); diff --git a/ext/gettext/gettext.c b/ext/gettext/gettext.c index 69166d18df..1c9a9fefd1 100644 --- a/ext/gettext/gettext.c +++ b/ext/gettext/gettext.c @@ -52,7 +52,7 @@ php3_module_entry php3_gettext_module_entry = { "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."); } diff --git a/ext/gettext/php3_gettext.h b/ext/gettext/php3_gettext.h index eb7b851b4a..b3ae0131d5 100644 --- a/ext/gettext/php3_gettext.h +++ b/ext/gettext/php3_gettext.h @@ -40,7 +40,7 @@ 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); diff --git a/ext/hyperwave/hw.c b/ext/hyperwave/hw.c index f2380dde05..dcee8874d5 100644 --- a/ext/hyperwave/hw.c +++ b/ext/hyperwave/hw.c @@ -1531,7 +1531,7 @@ void php3_hw_getcgi(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 @@ -1783,7 +1783,7 @@ void php3_hw_pipecgi(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 @@ -2959,7 +2959,7 @@ void php3_hw_getrellink(INTERNAL_FUNCTION_PARAMETERS) { /* }}} */ -void php3_info_hw() +void php3_info_hw(ZEND_MODULE_INFO_FUNC_ARGS) { php3_printf("HG-CSP Version: 7.17"); } diff --git a/ext/hyperwave/hw.h b/ext/hyperwave/hw.h index 21c2e6ad07..4f4fd11219 100644 --- a/ext/hyperwave/hw.h +++ b/ext/hyperwave/hw.h @@ -109,7 +109,7 @@ extern void php3_hw_document_content(INTERNAL_FUNCTION_PARAMETERS); 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); diff --git a/ext/informix/php3_ifx.h b/ext/informix/php3_ifx.h index d06cf16600..d64bb2c403 100644 --- a/ext/informix/php3_ifx.h +++ b/ext/informix/php3_ifx.h @@ -56,7 +56,7 @@ extern php3_module_entry ifx_module_entry; 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); diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c index c239cb610c..1cc8aa530b 100644 --- a/ext/interbase/interbase.c +++ b/ext/interbase/interbase.c @@ -214,7 +214,7 @@ int php3_rfinish_ibase(void) } */ -void php3_info_ibase(void) +void php3_info_ibase(ZEND_MODULE_INFO_FUNC_ARGS) { /* TODO */ } diff --git a/ext/interbase/php3_interbase.h b/ext/interbase/php3_interbase.h index 47da79d574..ec2fe6ef80 100644 --- a/ext/interbase/php3_interbase.h +++ b/ext/interbase/php3_interbase.h @@ -47,7 +47,7 @@ extern php3_module_entry ibase_module_entry; 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); diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index f85b0dcf7c..93c19d43ce 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -260,7 +260,7 @@ int php3_mshutdown_ldap(SHUTDOWN_FUNC_ARGS) { return SUCCESS; } -void php3_info_ldap(void) +void php3_info_ldap(ZEND_MODULE_INFO_FUNC_ARGS) { char maxl[16]; #if HAVE_NSLDAP diff --git a/ext/ldap/php3_ldap.h b/ext/ldap/php3_ldap.h index 1440df17f5..ac6781527b 100644 --- a/ext/ldap/php3_ldap.h +++ b/ext/ldap/php3_ldap.h @@ -50,7 +50,7 @@ extern php3_module_entry ldap_module_entry; 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); diff --git a/ext/msql/msql.c b/ext/msql/msql.c index acf687174b..074c7d0da3 100644 --- a/ext/msql/msql.c +++ b/ext/msql/msql.c @@ -275,7 +275,7 @@ DLEXPORT int php3_rinit_msql(INIT_FUNC_ARGS) 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; diff --git a/ext/msql/php3_msql.h b/ext/msql/php3_msql.h index 6c1e8e3fbf..738f0c0856 100644 --- a/ext/msql/php3_msql.h +++ b/ext/msql/php3_msql.h @@ -48,7 +48,7 @@ extern php3_module_entry msql_module_entry; 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); diff --git a/ext/mysql/mysql.c b/ext/mysql/mysql.c index b19215d283..afe05d3b7e 100644 --- a/ext/mysql/mysql.c +++ b/ext/mysql/mysql.c @@ -309,7 +309,7 @@ int php3_rinit_mysql(INIT_FUNC_ARGS) } -void php3_info_mysql(void) +void php3_info_mysql(ZEND_MODULE_INFO_FUNC_ARGS) { char maxp[16],maxl[16]; MySLS_FETCH(); diff --git a/ext/mysql/php3_mysql.h b/ext/mysql/php3_mysql.h index 748ad70a67..0988631d1e 100644 --- a/ext/mysql/php3_mysql.h +++ b/ext/mysql/php3_mysql.h @@ -49,7 +49,7 @@ extern php3_module_entry mysql_module_entry; 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); diff --git a/ext/odbc/odbc.c b/ext/odbc/odbc.c index 768af90802..3af8798c55 100644 --- a/ext/odbc/odbc.c +++ b/ext/odbc/odbc.c @@ -287,7 +287,7 @@ int php3_mshutdown_odbc(SHUTDOWN_FUNC_ARGS) } -void php3_info_odbc(void) +void php3_info_odbc(ZEND_MODULE_INFO_FUNC_ARGS) { ODBC_TLS_VARS; diff --git a/ext/odbc/php3_odbc.h b/ext/odbc/php3_odbc.h index 2e5abe9d22..295f6b4fb8 100644 --- a/ext/odbc/php3_odbc.h +++ b/ext/odbc/php3_odbc.h @@ -120,7 +120,7 @@ extern php3_module_entry odbc_module_entry; 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); diff --git a/ext/odbc/php3_velocis.h b/ext/odbc/php3_velocis.h index 19d9f4070a..dd114ceec6 100644 --- a/ext/odbc/php3_velocis.h +++ b/ext/odbc/php3_velocis.h @@ -76,8 +76,8 @@ extern php3_module_entry velocis_module_entry; /* 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); diff --git a/ext/odbc/velocis.c b/ext/odbc/velocis.c index 0c5b03eab0..9e0de4dc90 100644 --- a/ext/odbc/velocis.c +++ b/ext/odbc/velocis.c @@ -111,7 +111,7 @@ int php3_rinit_velocis(INIT_FUNC_ARGS) } -void php3_info_velocis(void) +void php3_info_velocis(ZEND_MODULE_INFO_FUNC_ARGS) { php3_printf("RAIMA Velocis Support Active"); } diff --git a/ext/oracle/oci8.c b/ext/oracle/oci8.c index 47639809dd..39ffec33e8 100644 --- a/ext/oracle/oci8.c +++ b/ext/oracle/oci8.c @@ -162,7 +162,7 @@ int php3_minit_oci8(INIT_FUNC_ARGS); 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 */ @@ -536,7 +536,7 @@ int php3_rshutdown_oci8(SHUTDOWN_FUNC_ARGS) } -void php3_info_oci8() +void php3_info_oci8(ZEND_MODULE_INFO_FUNC_ARGS) { #if !(WIN32|WINNT) php3_printf("Oracle version: %s<br>\n" diff --git a/ext/oracle/oracle.c b/ext/oracle/oracle.c index af6a8f84d5..51997baf22 100644 --- a/ext/oracle/oracle.c +++ b/ext/oracle/oracle.c @@ -1564,7 +1564,7 @@ void php3_Ora_ErrorCode(INTERNAL_FUNCTION_PARAMETERS) } /* }}} */ -void php3_info_oracle() +void php3_info_oracle(ZEND_MODULE_INFO_FUNC_ARGS) { #if !(WIN32|WINNT) php3_printf("Oracle version: %s<br>\n" diff --git a/ext/oracle/oracle.h b/ext/oracle/oracle.h index 3b5f6bea61..75faf27a0d 100644 --- a/ext/oracle/oracle.h +++ b/ext/oracle/oracle.h @@ -136,7 +136,7 @@ extern void php3_Ora_Rollback(INTERNAL_FUNCTION_PARAMETERS); 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 diff --git a/ext/pdf/pdf.c b/ext/pdf/pdf.c index 2e90f5aa2e..ce34ca7b2a 100644 --- a/ext/pdf/pdf.c +++ b/ext/pdf/pdf.c @@ -161,7 +161,7 @@ int php3_minit_pdf(INIT_FUNC_ARGS) 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); } diff --git a/ext/pdf/php3_pdf.h b/ext/pdf/php3_pdf.h index 2f97e60243..00437519b0 100644 --- a/ext/pdf/php3_pdf.h +++ b/ext/pdf/php3_pdf.h @@ -40,7 +40,7 @@ extern int le_fp; 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); diff --git a/ext/rpc/com/COM.c b/ext/rpc/com/COM.c index 919e8ec21c..5f618264b0 100644 --- a/ext/rpc/com/COM.c +++ b/ext/rpc/com/COM.c @@ -74,8 +74,15 @@ function_entry COM_functions[] = { {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(); @@ -213,7 +220,7 @@ static PHP_INI_MH(OnTypelibFileChange) 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() diff --git a/ext/snmp/php3_snmp.h b/ext/snmp/php3_snmp.h index c35962cf8f..520e9ee2fa 100644 --- a/ext/snmp/php3_snmp.h +++ b/ext/snmp/php3_snmp.h @@ -46,7 +46,7 @@ extern int php3i_snmp_init(INIT_FUNC_ARGS); 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 diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 05c35f3b54..5943decc83 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -104,7 +104,7 @@ int php3i_snmp_init(INIT_FUNC_ARGS) { return SUCCESS; } -void php3_info_snmp(void) { +void php3_info_snmp(ZEND_MODULE_INFO_FUNC_ARGS) { php3_printf("ucd-snmp"); } diff --git a/ext/standard/dl.c b/ext/standard/dl.c index 7471634ab5..c95fa431c6 100644 --- a/ext/standard/dl.c +++ b/ext/standard/dl.c @@ -160,7 +160,7 @@ void php3_dl(pval *file,int type,pval *return_value) } -void php3_info_dl(void) +void php3_info_dl(ZEND_MODULE_INFO_FUNC_ARGS) { PUTS("Dynamic Library support enabled.\n"); } diff --git a/ext/standard/dl.h b/ext/standard/dl.h index 900bca4294..87a684e583 100644 --- a/ext/standard/dl.h +++ b/ext/standard/dl.h @@ -48,7 +48,7 @@ extern void dl(INTERNAL_FUNCTION_PARAMETERS); 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 diff --git a/ext/standard/head.c b/ext/standard/head.c index 636f143803..86e3a7d835 100644 --- a/ext/standard/head.c +++ b/ext/standard/head.c @@ -76,7 +76,7 @@ PHPAPI void php3_noheader(void) } -#ifdef APACHE +#if 0 /* Adds header information */ void php4i_add_header_information(char *header_information, uint header_length) { @@ -229,7 +229,7 @@ void php3_Header(INTERNAL_FUNCTION_PARAMETERS) -#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. @@ -438,15 +438,10 @@ CookieList *php3_PopCookieList(void) /* 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; @@ -465,100 +460,107 @@ void php3_SetCookie(INTERNAL_FUNCTION_PARAMETERS) 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 } diff --git a/ext/standard/info.c b/ext/standard/info.c index 5f841a0760..70b3a05457 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -40,17 +40,6 @@ #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); @@ -60,17 +49,15 @@ #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; } @@ -104,105 +91,59 @@ PHPAPI void _php3_info(void) #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? */ @@ -211,15 +152,7 @@ PHPAPI void _php3_info(void) } *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"); @@ -232,34 +165,18 @@ PHPAPI void _php3_info(void) 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); @@ -338,13 +255,9 @@ PHPAPI void _php3_info(void) 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"); } @@ -362,18 +275,12 @@ PHPAPI void _php3_info(void) 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"); @@ -381,11 +288,7 @@ PHPAPI void _php3_info(void) 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"); @@ -394,15 +297,6 @@ PHPAPI void _php3_info(void) 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"); @@ -426,6 +320,53 @@ PHPAPI void _php3_info(void) } + +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) diff --git a/ext/standard/info.h b/ext/standard/info.h index 49adc456f6..73db458108 100644 --- a/ext/standard/info.h +++ b/ext/standard/info.h @@ -32,9 +32,11 @@ #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 */ diff --git a/ext/standard/mail.c b/ext/standard/mail.c index da06d4007d..a6e97161ed 100644 --- a/ext/standard/mail.c +++ b/ext/standard/mail.c @@ -160,7 +160,7 @@ int _php3_mail(char *to, char *subject, char *message, char *headers) 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"); @@ -172,7 +172,7 @@ void php3_info_mail(void) #else void php3_mail(INTERNAL_FUNCTION_PARAMETERS) {} -void php3_info_mail() {} +void php3_info_mail(ZEND_MODULE_INFO_FUNC_ARGS) {} #endif diff --git a/ext/standard/php3_mail.h b/ext/standard/php3_mail.h index 3fb763ecb0..71ac97fe8f 100644 --- a/ext/standard/php3_mail.h +++ b/ext/standard/php3_mail.h @@ -37,7 +37,7 @@ extern php3_module_entry mail_module_entry; #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 diff --git a/ext/standard/post.c b/ext/standard/post.c index f961602e77..7be502ff69 100644 --- a/ext/standard/post.c +++ b/ext/standard/post.c @@ -42,6 +42,7 @@ * 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; @@ -149,6 +150,14 @@ static char *php3_getpost(pval *http_post_vars PLS_DC) #endif return (buf); } +#else +static char *php3_getpost(pval *http_post_vars PLS_DC) +{ + SLS_FETCH(); + + return SG(request_info).post_data; +} +#endif /* @@ -352,7 +361,7 @@ void php3_treat_data(int arg, char *str) 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); } diff --git a/ext/sybase/php3_sybase-ct.h b/ext/sybase/php3_sybase-ct.h index 1ce0a30f0c..c8e89a6213 100644 --- a/ext/sybase/php3_sybase-ct.h +++ b/ext/sybase/php3_sybase-ct.h @@ -49,7 +49,7 @@ extern int php3_minit_sybct(INIT_FUNC_ARGS); 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); diff --git a/ext/sybase/php3_sybase.h b/ext/sybase/php3_sybase.h index dbfcdd767a..3b1a5e18a1 100644 --- a/ext/sybase/php3_sybase.h +++ b/ext/sybase/php3_sybase.h @@ -47,7 +47,7 @@ extern int php3_minit_sybase(INIT_FUNC_ARGS); 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); diff --git a/ext/sybase/sybase-ct.c b/ext/sybase/sybase-ct.c index 7f45658d6b..58ba286bad 100644 --- a/ext/sybase/sybase-ct.c +++ b/ext/sybase/sybase-ct.c @@ -1596,7 +1596,7 @@ void php3_sybct_affected_rows(INTERNAL_FUNCTION_PARAMETERS) } -void php3_info_sybct(void) +void php3_info_sybct(ZEND_MODULE_INFO_FUNC_ARGS) { char maxp[16],maxl[16]; diff --git a/ext/sybase/sybase.c b/ext/sybase/sybase.c index df17867142..94a8c9ccd1 100644 --- a/ext/sybase/sybase.c +++ b/ext/sybase/sybase.c @@ -1186,7 +1186,7 @@ void php3_sybase_result(INTERNAL_FUNCTION_PARAMETERS) } -void php3_info_sybase(void) +void php3_info_sybase(ZEND_MODULE_INFO_FUNC_ARGS) { char maxp[16],maxl[16]; diff --git a/ext/xml/xml.c b/ext/xml/xml.c index eed6a3f6e0..299be2cfc3 100644 --- a/ext/xml/xml.c +++ b/ext/xml/xml.c @@ -102,7 +102,7 @@ int php3_minit_xml(INIT_FUNC_ARGS); 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 *); @@ -273,7 +273,7 @@ int php3_rshutdown_xml(SHUTDOWN_FUNC_ARGS) /* }}} */ /* {{{ php3_info_xml() */ -void php3_info_xml() +void php3_info_xml(ZEND_MODULE_INFO_FUNC_ARGS) { PUTS("XML support active"); } diff --git a/ext/zlib/php3_zlib.h b/ext/zlib/php3_zlib.h index 22052fbab4..710c694cba 100644 --- a/ext/zlib/php3_zlib.h +++ b/ext/zlib/php3_zlib.h @@ -40,7 +40,7 @@ extern php3_module_entry php3_zlib_module_entry; 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); diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index 46ff513c56..c72c07c26d 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -179,7 +179,7 @@ int php3_mshutdown_zlib(SHUTDOWN_FUNC_ARGS){ 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); diff --git a/main/SAPI.c b/main/SAPI.c index 1df5fe4fea..a5b9b21b9d 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -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 @@ static void sapi_free_header(sapi_header_struct *sapi_header) 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_API int sapi_add_header(char *header_line, uint header_line_len) 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 @@ SAPI_API int sapi_add_header(char *header_line, uint header_line_len) 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 @@ SAPI_API int sapi_send_headers() 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)); diff --git a/main/SAPI.h b/main/SAPI.h index 58925b630e..03bc4f7868 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -24,8 +24,8 @@ typedef struct { 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 @@ extern sapi_module_struct sapi_module; /* true global */ 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 @@ struct _sapi_module_struct { 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); }; diff --git a/main/main.c b/main/main.c index 52a1f07b85..a14dbbabcf 100644 --- a/main/main.c +++ b/main/main.c @@ -186,41 +186,41 @@ static PHP_INI_MH(OnUpdateErrorReporting) # 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) @@ -233,12 +233,12 @@ PHP_INI_BEGIN() 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 php_module_startup(sapi_module_struct *sf) 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 @@ int php_module_startup(sapi_module_struct *sf) wVersionRequested = MAKEWORD(2, 0); #endif + SG(server_context) = NULL; + sapi_activate(SLS_C); if (module_initialized) { return SUCCESS; @@ -805,6 +808,7 @@ int php_module_startup(sapi_module_struct *sf) #endif PG(header_is_being_sent) = 0; + SG(request_info).headers_only = 0; #if HAVE_SETLOCALE setlocale(LC_CTYPE, ""); @@ -838,6 +842,7 @@ int php_module_startup(sapi_module_struct *sf) return FAILURE; } module_initialized = 1; + sapi_deactivate(SLS_C); return SUCCESS; } @@ -903,7 +908,7 @@ int _php3_hash_environment(PLS_D ELS_DC) 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; } diff --git a/main/php_ini.c b/main/php_ini.c index 815b582cbd..fbe1ad0dab 100644 --- a/main/php_ini.c +++ b/main/php_ini.c @@ -34,6 +34,10 @@ #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 @@ int php_ini_rshutdown() * 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 @@ int php_register_ini_entries(php_ini_entry *ini_entry, int module_number) } -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_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_ } -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 @@ int php_restore_ini_entry(char *name, uint name_length) } +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 @@ long php_ini_long(char *name, uint name_length, int orig) } -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 @@ double php_ini_double(char *name, uint name_length, int orig) } -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; @@ -235,7 +253,101 @@ char *php_ini_string(char *name, uint name_length, int orig) -/* 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) { diff --git a/main/php_ini.h b/main/php_ini.h index f76dd83cbb..de9a994858 100644 --- a/main/php_ini.h +++ b/main/php_ini.h @@ -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 @@ struct _php_ini_entry { 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_mstartup(); 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) @@ -78,6 +102,10 @@ char *php_ini_string(char *name, uint name_length, int orig); #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); @@ -88,4 +116,8 @@ 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 */ diff --git a/mod_php3.c b/mod_php3.c index a102fe8f5f..01bdd8d73d 100644 --- a/mod_php3.c +++ b/mod_php3.c @@ -64,6 +64,8 @@ void php_module_shutdown(); 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 @@ static int zend_apache_ub_write(const char *str, uint str_length) } +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 @@ sapi_module_struct sapi_module = { 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 */ }; diff --git a/request_info.c b/request_info.c index ef8482772a..86a56f7c30 100644 --- a/request_info.c +++ b/request_info.c @@ -37,17 +37,11 @@ PHPAPI php3_request_info request_info; #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 @@ int php3_init_request_info(void *conf) 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; } diff --git a/request_info.h b/request_info.h index 2bcbfa7d77..51ff6606d2 100644 --- a/request_info.h +++ b/request_info.h @@ -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; |