Skip to content

Commit

Permalink
@- Zeus Webserver support (version 3.3.6+) for ISAPI
Browse files Browse the repository at this point in the history
  • Loading branch information
Ben Mansell committed Apr 12, 2000
1 parent 021631d commit 67f8673
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 7 deletions.
2 changes: 2 additions & 0 deletions INSTALL
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ install both.
If you want both PHP 3 and 4 modules in the same Apache server, check the
bottom of this file for instructions.

INSTALLATION WITH THE ZEUS WEB SERVER:
--Please see the 'README.Zeus' file included in this distribution

QUICK INSTALL (DSO)

Expand Down
91 changes: 91 additions & 0 deletions README.Zeus
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
Using PHP4 with the Zeus Web Server
-----------------------------------

Zeus fully supports running PHP in combination with our webserver. A
significant improvement in PHP 4 is that you can now run PHP as an
ISAPI module, giving great performance benefits over traditional CGI
code.

Note that you will need to be running at least version 3.3.6 of the
webserver. If you are running an earlier version, please see our
website (http://www.zeus.com) for upgrade instructions.


To build the ISAPI version of PHP, start the configuration with:

./configure --with-zeus=/usr/local/zeus

Obviously, replace /usr/local/zeus with the location of where you have
installed Zeus on your machine. For PHP to build successfully, you
need to have 3.3.6 already installed, because the code relies on the
presence of header files provided with the latest version.

You may have to adjust the environment variable LDFLAGS and EXTRA_LIBS
in order to link in extra libraries. This depends on the platform on
which you are building and also on the compiler used (see below). A
standard GNU/Linux install with GCC should build fine with no changes.


Configuring the webserver
-------------------------

After running 'make' and 'make install', you will have a 'libphp4.so'
file. Copy this file into a directory reserved for ISAPI
binaries. Now, perform the following steps for each virtual server
that you wish to run PHP on:

1) On the Admin server, go to 'edit server->path mapping'
2) Add an alias to the directory with libphp4.so in it, mapped to
/isapi/ (or a location of your choice). Make sure you set the alias
type to ISAPI.
3) Click 'update'
4) Add a handler for file extension 'php' to be run by /isapi/libphp4.so
5) Click 'update', then go back to the previous page.
6) Click on the 'module configuration' button, ensure that ISAPI
support is ticked.
7) Click on the ISAPI link. At the bottom of the page, click the
checkbox for running ISAPI extensions 'out of process'.
8) Click 'update'. Then restart the virtual server. Done!


Troubleshooting
---------------

*) Why does my PHP library fail to load?

After configuring Zeus, if you get a '502 Bad Gatway' error when
accessing a PHP page, there are problems loading the PHP
library. Check the error log ($ZEUSHOME/web/log/errors) for errors.

Failing to load the PHP ISAPI module is likely to be due to unresolved
symbols in the module. A way to check for this is to visit our support
page at http://support.zeus.com/faq/entries/isapi_error.html and run
the program there on your libphp4.so. It will list any unresolved
symbols.

*) My libphp4.so has unresolved symbols. How do I fix this?

You must ensure that the PHP build process links in the appropriate
libraries that contain these symbols! The libraries required will
depend on the platform you are running PHP on.

You may need to set one or two environment variables before running
the 'configure' program to set up PHP; LDFLAGS and EXTRA_LIBS. Make
sure that you also export these variables to the build process.
(Type 'export LDFLAGS EXTRA_LIBS' in the shell to do this.)

Specific examples:

Solaris + gcc: Set LDFLAGS to
'-L/usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.7/egcs-2.91.66
-L/usr/local/egcs/lib' (your paths may vary)
EXTRA_LIBS should be '-lgcc'

FreeBSD 4.0 + gcc: Set EXTRA_LIBS to '-lc_r_p -lgcc'

Linux/Alpha: Set EXTRA_LIBS to '-lstdc++-3-libc6.1-2-2.10.0'
(change as appropriate to the stdc++ in /usr/lib)


For more information and help with Zeus, please visit our website:
http://www.zeus.com
19 changes: 12 additions & 7 deletions sapi/isapi/php4isapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@
#ifdef PHP_WIN32
# include <windows.h>
# include <process.h>
# define SEPARATOR '\\'
#else
# define __try
# define __except(val)
# define __declspec(foo)
# define SEPARATOR '/'
#endif

#include <httpext.h>
Expand All @@ -37,7 +40,9 @@
#include "php_ini.h"

#ifdef WITH_ZEUS
#include "zeus.h"
# include "httpext.h"
# include <errno.h>
# define GetLastError() errno
#endif

#define MAX_STATUS_LENGTH sizeof("xxxx LONGEST STATUS DESCRIPTION")
Expand Down Expand Up @@ -219,9 +224,7 @@ static int sapi_isapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC)
header_info.pszStatus = status_buf;
break;
}
#ifndef WITH_ZEUS
header_info.cchStatus = strlen(header_info.pszStatus);
#endif
header_info.pszHeader = combined_headers;
header_info.cchHeader = total_length;
lpECB->dwHttpStatusCode = SG(sapi_headers).http_response_code;
Expand Down Expand Up @@ -450,12 +453,12 @@ static void init_request_info(sapi_globals_struct *sapi_globals, LPEXTENSION_CON
SG(request_info).content_type = lpECB->lpszContentType;
SG(request_info).content_length = lpECB->cbTotalBytes;
{
char *path_end = strrchr(SG(request_info).path_translated, '\\');
char *path_end = strrchr(SG(request_info).path_translated, SEPARATOR);

if (path_end) {
*path_end = 0;
PHP_CHDIR(SG(request_info).path_translated);
*path_end = '\\';
*path_end = SEPARATOR;
}
}
if (!bFilterLoaded) { /* we don't have valid ISAPI Filter information */
Expand All @@ -471,9 +474,7 @@ static void php_isapi_report_exception(char *message, int message_len SLS_DC)
LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);

header_info.pszStatus = "500 Internal Server Error";
#ifndef WITH_ZEUS
header_info.cchStatus = strlen(header_info.pszStatus);
#endif
header_info.pszHeader = "Content-Type: text/html\r\n\r\n";
header_info.cchHeader = strlen(header_info.pszHeader);

Expand All @@ -488,7 +489,11 @@ static void php_isapi_report_exception(char *message, int message_len SLS_DC)
BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer)
{
pVer->dwExtensionVersion = HSE_VERSION;
#ifdef WITH_ZEUS
strncpy( pVer->lpszExtensionDesc, sapi_module.name, HSE_MAX_EXT_DLL_NAME_LEN);
#else
lstrcpyn(pVer->lpszExtensionDesc, sapi_module.name, HSE_MAX_EXT_DLL_NAME_LEN);
#endif
return TRUE;
}

Expand Down

0 comments on commit 67f8673

Please sign in to comment.