mirror of
https://github.com/php/php-src.git
synced 2024-11-25 10:54:15 +08:00
158 lines
6.4 KiB
Plaintext
158 lines
6.4 KiB
Plaintext
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.8 of the
|
|
webserver. If you are running an earlier version, please see our
|
|
website (http://www.zeus.com) for upgrade instructions.
|
|
Earlier versions of Zeus (3.3.6) can also run PHP, but it is
|
|
suggested that you upgrade for full compatibility.
|
|
|
|
You should compile PHP using the gcc compiler. Other compilers may
|
|
cause build errors.
|
|
|
|
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 the compile fail at Zend/zend-scanner-cc.cc
|
|
or Zend/zend-parser.c ?
|
|
|
|
These source files are auto-generated from the corresponding .y files.
|
|
The default distribution of PHP contains pre-generated versions of these
|
|
files that have caused problems for some people. The simplest solution is
|
|
to delete the files. They will then be rebuilt correctly. You must have the
|
|
following GNU tools to do this:
|
|
|
|
bison 1.28 or later
|
|
flex 2.5.4 or later
|
|
|
|
*) Why does my PHP library fail to load?
|
|
|
|
After configuring Zeus, if you get a '502 Bad Gateway' 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.)
|
|
|
|
If you are using 3rd party tools and libraries which are installed
|
|
in non-standard locations, you may need to set the environment
|
|
variable LD_LIBRARY_PATH to point to the library's location, prior
|
|
to running the Zeus Web Server. For example, if you have compiled
|
|
external MySQL support, and mysql is installed in /usr/local/mysql,
|
|
you should set LD_LIBRARY_PATH to '/usr/local/mysql/lib/mysql'
|
|
and then 'export LD_LIBRARY_PATH'. For convenience, you should add
|
|
this to the 'start-zeus' script provided.
|
|
|
|
Yet another method of ensuring the linked libraries are found is to
|
|
set the environment variable LD_RUN_PATH before compiling PHP. This
|
|
works in a similar way to LD_LIBRARY_PATH, but at compile-time.
|
|
Libraries produced with this envrionment variable set will have its
|
|
value 'burned' into the resultant binary, specifying a runtime
|
|
search pth to locate other required libraries such as MySQL.
|
|
|
|
On Linux, you can also tell the dynamic linker where to find the
|
|
libraries, by adding '/usr/local/mysql/lib/mysql' to the file
|
|
/etc/ld.so.conf - after editting this file, run 'ldconfig' as root,
|
|
to use the changes.
|
|
|
|
|
|
Specific examples:
|
|
|
|
Solaris + gcc:
|
|
Ensure you run ./configure with the `--enable-libgcc' parameter. You
|
|
may need to set LDFLAGS to '-L/usr/local/egcs/lib' (path depends on
|
|
your gcc installation)
|
|
|
|
FreeBSD 4:
|
|
Some people may find they need to run ./configure with the
|
|
'--enable-libgcc' compile option too.
|
|
|
|
|
|
Performance issues
|
|
==================
|
|
|
|
To make PHP run fast under Zeus, check the following points:
|
|
|
|
1) Run PHP as an ISAPI module, not a CGI - compile it with the --with-zeus=...
|
|
flag!
|
|
|
|
2) Tune the ISAPI runner to your required workload. There are several
|
|
tuneables that can be given. These are set by adding the appropriate
|
|
lines to the $ZEUSHOME/web/global.cfg file. Changes to this file will only
|
|
be picked up after the web server is restarted (run stop-zeus ; start-zeus)
|
|
|
|
tuning!modules!isapi!external!maxthreads xxx
|
|
|
|
- Sets the maximum number of threads that the ISAPI runner will spawn. If
|
|
further PHP page requests arrive, they will be queued until a current
|
|
page is finished. For busy websites, we suggest increasing this value
|
|
(defaults to 16). Replace the 'xxx' in the above line with the required
|
|
number of threads. Note that the threads are equally shared between
|
|
ISAPI extensions and filters, so if you want to handle 100 concurrent
|
|
PHP page requests, set this tuneable to 200.
|
|
|
|
tuning!modules!isapi!external!minthreads xxx
|
|
|
|
- Sets the minimum number of threads. Idle threads will be kept in a pool,
|
|
which avoids costly thread creation/deletion.
|
|
|
|
|
|
For more information and help with Zeus, please visit our website:
|
|
http://support.zeus.com
|