mirror of
https://github.com/php/php-src.git
synced 2026-03-24 08:12:21 +01:00
If the same php_value/php_flag is present in httpd.conf and .htaccess,
the key is potentially shared between threads. Unfortunately we can't
intern these keys using the current mechanism, because the MPM is setup
before the SAPI module setup is even started. A more elegant way were
to implement a kind of string pool for the thread safe Apache SAPI
config directives with the mechanism similar to what is done for the
SAPI setup now, but doing a separate management.
(cherry picked from commit 73eb5a78b9)
WHAT IS THIS?
This module exploits the layered I/O support in Apache 2.0.
HOW DOES IT WORK?
In Apache 2.0, you have handlers which generate content (like
reading a script from disk). The content goes then through
a chain of filters. PHP can be such a filter, so that it processes
your script and hands the output to the next filter (which will
usually cause a write to the network).
DOES IT WORK?
Currently the issues with the module are:
* Thread safety of external PHP modules
* The lack of re-entrancy of PHP. due to this I have disabled the 'virtual'
function, and tried to stop any method where a php script can run another php
script while it is being run.
HOW TO INSTALL
This SAPI module is known to work with Apache 2.0.44.
$ cd apache-2.x
$ cd src
$ ./configure --enable-so
$ make install
For testing purposes, you might want to use --with-mpm=prefork.
(Albeit PHP also works with threaded MPMs. See Thread Safety note above)
Configure PHP 4:
$ cd php-4.x
$ ./configure --with-apxs2=/path/to/apache-2.0/bin/apxs
$ make install
At the end of conf/httpd.conf, add:
AddType application/x-httpd-php .php
If you would like to enable source code highlighting functionality add:
AddType application/x-httpd-php-source .phps
That's it. Now start bin/httpd.
HOW TO CONFIGURE
The Apache 2.0 PHP module supports a new configuration directive that
allows an admin to override the php.ini search path. For example,
place your php.ini file in Apache's ServerRoot/conf directory and
add this to your httpd.conf file:
PHPINIDir "conf"
DEBUGGING APACHE AND PHP
To debug Apache, we recommend:
1. Use the Prefork MPM (Apache 1.3-like process model) by
configuring Apache with '--with-mpm=prefork'.
2. Start httpd using -DONE_PROCESS (e.g. (gdb) r -DONE_PROCESS).
If you want to debug a part of the PHP startup procedure, set a
breakpoint on 'load_module'. Step through it until apr_dso_load() is
done. Then you can set a breakpoint on any PHP-related symbol.
TODO
PHP functions like apache_sub_req (see php_functions.c)
Source Code Highlighting
Protocol handlers