PUTS("<h1>PHP 4.0 Credits</h1>\n");
+ if (flag & PHP_CREDITS_GROUP) {
+ /* Group */
+
+ PUTS("<table border=5 width=\"600\">\n");
+ php_info_print_table_header(1, "PHP Group");
+ php_info_print_table_row(1, "Thies C. Arntzen, Stig Bakken, Andi Gutmans, Rasmus Lerdorf, \
+ Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski");
+ PUTS("</table>\n");
+ }
+
if (flag & PHP_CREDITS_GENERAL) {
/* Language */
+
PUTS("<table border=5 width=\"600\">\n");
PUTS("<tr><th colspan=\"2\" bgcolor=\"" PHP_HEADER_COLOR "\">PHP 4.0 Authors</th></tr>\n");
php_info_print_table_header(2, "Contribution", "Authors");
- CREDIT_LINE("PHP Group", "Thies C. Arntzen, Stig Bakken, Andi Gutmans, Rasmus Lerdorf, \
- Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski");
CREDIT_LINE("Zend Scripting Language Engine", "Andi Gutmans, Zeev Suraski");
CREDIT_LINE("Extension Module API", "Andi Gutmans, Zeev Suraski");
CREDIT_LINE("UNIX Build and Modularization", "Stig Bakken, Sascha Schumann");
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");
- CREDIT_LINE("AOLserver SAPI Module", "Sascha Schumann");
- CREDIT_LINE("Servlet SAPI Module", "Sam Ruby");
- CREDIT_LINE("Roxen SAPI Module", "David Hedbor");
- CREDIT_LINE("thttpd SAPI Module", "Sascha Schumann");
+ PUTS("</table>\n");
+ }
+
+ if (flag & PHP_CREDITS_GENERAL) {
+ /* SAPI Modules */
+
+ PUTS("<table border=5 width=\"600\">\n");
+ PUTS("<tr><th colspan=\"2\" bgcolor=\"" PHP_HEADER_COLOR "\">SAPI Modules</th></tr>\n");
+ php_info_print_table_header(2, "Contribution", "Authors");
+ CREDIT_LINE("Apache", "Rasmus Lerdorf, Zeev Suraski");
+ CREDIT_LINE("ISAPI", "Andi Gutmans, Zeev Suraski");
+ CREDIT_LINE("CGI", "Rasmus Lerdorf, Stig Bakken");
+ CREDIT_LINE("AOLserver", "Sascha Schumann");
+ CREDIT_LINE("Java Servlet", "Sam Ruby");
+ CREDIT_LINE("Roxen", "David Hedbor");
+ CREDIT_LINE("thttpd", "Sascha Schumann");
PUTS("</table>\n");
}
if (flag & PHP_CREDITS_MODULES) {
/* Modules */
+
PUTS("<table border=5 width=\"600\">\n");
PUTS("<tr><th colspan=\"2\" bgcolor=\"" PHP_HEADER_COLOR "\">Module Authors</th></tr>\n");
php_info_print_table_header(2, "Module", "Authors");
REGISTER_LONG_CONSTANT("INFO_VARIABLES", PHP_INFO_VARIABLES, CONST_PERSISTENT|CONST_CS);
REGISTER_LONG_CONSTANT("INFO_LICENSE", PHP_INFO_LICENSE, CONST_PERSISTENT|CONST_CS);
REGISTER_LONG_CONSTANT("INFO_ALL", PHP_INFO_ALL, CONST_PERSISTENT|CONST_CS);
+ REGISTER_LONG_CONSTANT("CREDITS_GROUP", PHP_CREDITS_GROUP, CONST_PERSISTENT|CONST_CS);
+ REGISTER_LONG_CONSTANT("CREDITS_GENERAL", PHP_CREDITS_GENERAL, CONST_PERSISTENT|CONST_CS);
+ REGISTER_LONG_CONSTANT("CREDITS_SAPI", PHP_CREDITS_SAPI, CONST_PERSISTENT|CONST_CS);
+ REGISTER_LONG_CONSTANT("CREDITS_MODULES", PHP_CREDITS_MODULES, CONST_PERSISTENT|CONST_CS);
+ REGISTER_LONG_CONSTANT("CREDITS_DOCS", PHP_CREDITS_DOCS, CONST_PERSISTENT|CONST_CS);
+ REGISTER_LONG_CONSTANT("CREDITS_FULLPAGE", PHP_CREDITS_FULLPAGE, CONST_PERSISTENT|CONST_CS);
+ REGISTER_LONG_CONSTANT("CREDITS_ALL", PHP_CREDITS_ALL, CONST_PERSISTENT|CONST_CS);
}
+----------------------------------------------------------------------+
*/
-#if WIN32|WINNT
+#ifdef PHP_WIN32
# include <windows.h>
+# include <process.h>
+#else
+# define __try
+# define __except(val)
#endif
+
#include <httpext.h>
#include <httpfilt.h>
#include <httpext.h>
#include "php_globals.h"
#include "ext/standard/info.h"
#include "php_variables.h"
+#include "php_ini.h"
#ifdef WITH_ZEUS
#include "zeus.h"
#define ISAPI_POST_DATA_BUF 1024
static zend_bool bFilterLoaded=0;
+static zend_bool bTerminateThreadsOnError=0;
static char *isapi_server_variables[] = {
"ALL_HTTP",
DWORD num_bytes = str_length;
LPEXTENSION_CONTROL_BLOCK ecb;
SLS_FETCH();
- ELS_FETCH();
ecb = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
if (ecb->WriteClient(ecb->ConnID, (char *) str, &num_bytes, HSE_IO_SYNC ) == FALSE) {
- longjmp(EG(bailout), 1);
+ zend_bailout();
}
return num_bytes;
}
|| zend_startup_module(&php_isapi_module)==FAILURE) {
return FAILURE;
} else {
+ bTerminateThreadsOnError = (zend_bool) INI_INT("isapi.terminate_threads_on_error");
return SUCCESS;
}
}
}
+static void my_endthread()
+{
+#ifdef PHP_WIN32
+ if (bTerminateThreadsOnError) {
+ _endthread();
+ }
+#endif
+}
+
+
DWORD WINAPI HttpExtensionProc(LPEXTENSION_CONTROL_BLOCK lpECB)
{
zend_file_handle file_handle;
efree(SG(request_info).cookie_data);
}
} __except(EXCEPTION_EXECUTE_HANDLER) {
+#ifdef PHP_WIN32
if (_exception_code()==EXCEPTION_STACK_OVERFLOW) {
LPBYTE lpPage;
static SYSTEM_INFO si;
/* Free pages below current page */
if (!VirtualFree(mi.AllocationBase, (LPBYTE)lpPage - (LPBYTE) mi.AllocationBase, MEM_DECOMMIT)) {
- ExitThread(0);
+ _endthread();
}
/* Restore the guard page */
if (!VirtualProtect(lpPage, si.dwPageSize, PAGE_GUARD | PAGE_READWRITE, &dwOldProtect)) {
- ExitThread(0);
+ _endthread();
}
CG(unclean_shutdown)=1;
php_isapi_report_exception("Stack overflow", sizeof("Stack overflow")-1 SLS_CC);
} else if (_exception_code()==EXCEPTION_ACCESS_VIOLATION) {
php_isapi_report_exception("Access violation", sizeof("Access violation")-1 SLS_CC);
- ExitThread(0);
+ my_endthread();
} else {
- ExitThread(0);
+ php_isapi_report_exception("Unknown fatal exception", sizeof("Unknown fatal exception")-1 SLS_CC);
+ my_endthread();
}
+#endif
}
__try {
php_request_shutdown(NULL);
} __except(EXCEPTION_EXECUTE_HANDLER) {
- ExitThread(0);
+ my_endthread();
}
return HSE_STATUS_SUCCESS;