Note: Prior to working through the rest of this chapter, you should retrieve clean, unmodified source trees of your favorite Web server. We're working with Apache (available at http://www.apache.org/) and, of course, with PHP (available at http://www.php.net/ - does it need to be said?).
Make sure that you can compile a working PHP environment by yourself! We won't go into this issue here, however, as you should already have this most basic ability when studying this chapter.
Before we start discussing code issues, you should familiarize yourself with the source tree to be able to quickly navigate through PHP's files. This is a must-have ability to implement and debug extensions.
After extracting the PHP archive, you'll see a directory layout similar to that in Figure 28-1.
The following table describes the contents of the major directories.
Directory | Contents |
php-4 | Main PHP source files and main header files; here you'll find all of PHP's API definitions, macros, etc. (important). |
ext | Repository for dynamic and built-in modules; by default, these are the "official" PHP modules that have been integrated into the main source tree. In PHP 4.0, it's possible to compile these standard extensions as dynamic loadable modules (at least, those that support it). |
pear | Directory for the PHP class repository. At the time of this writing, this is still in the design phase, but it's being tried to establish something similar to CPAN for Perl here. |
sapi | Contains the code for the different server abstraction layers. |
TSRM | Location of the "Thread Safe Resource Manager" (TSRM) for Zend and PHP. |
Zend | Location of Zend's file; here you'll find all of Zend's API definitions, macros, etc. (important). |
Discussing all the files included in the PHP package is beyond the scope of this chapter. However, you should take a close look at the following files:
php.h, located in the main PHP directory. This file contains most of PHP's macro and API definitions.
zend.h, located in the main Zend directory. This file contains most of Zend's macros and definitions.
zend_API.h, also located in the Zend directory, which defines Zend's API.