mirror of
https://github.com/php/php-src.git
synced 2024-10-20 16:02:44 +00:00
27a5b380cf
to do some trickery with the server_context to make sure it is always valid within the current thread. This patch makes sure the server_context is created in apache's post_read_request hook phase, and then registeres a cleanup that will NULL out the server context when the request goes out of scope. Then, inside the output filters, if the server_context is null we throw an error. Finally, instead of saving the output filter in the server_context, now we store the entire request_rec pointer in there. POST bodies appear to be working now, although they are very inefficient. The input filter is still just realloc()ing for whatever data comes down the input pipe, and then sending this to PHP. This means that we are doing some really nasty memory management on big POST bodies. For now this it allows for unlimited input bodies, which means that a big POST could potentially DoS a box by making it run out of memory. We might want to put a limit on here just in case, at least until we figure out how to consume input data more efficiently into php. |
||
---|---|---|
.. | ||
apache_config.c | ||
config.m4 | ||
CREDITS | ||
php4apache2.dsp | ||
php_apache.h | ||
php_functions.c | ||
php.sym | ||
README | ||
sapi_apache2.c |
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? It is experimental as interfaces in Apache 2.0 might change in the future. HOW TO INSTALL Get the latest Apache 2.0 sources from CVS and install it. This SAPI module is known to work with Apache 2.0.35. $ 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.) 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 That's it. Now start bin/httpd. DEBUGGING APACHE AND PHP To debug Apache, we recommened: 1. Use the Prefork MPM (Apache 1.3-like process model) by configuring Apache with '--with-mpm=prefork'. 2. Set the variable "ONE_PROCESS" to 1 and export it before starting Apache/a debugger. 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) Protocol handlers Passing script data to engine without temporary file Syntax Highlighter (relies on files as well)