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 27-1.
Figure 27-1. Main directory layout of the PHP source tree.
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.
You should also follow some sub-inclusions from
these files; for example, the ones relating to the Zend executor,
the PHP initialization file support, and such. After reading these
files, take the time to navigate around the package a little to see
the interdependencies of all files and modules - how they relate to
each other and especially how they make use of each other. This
also helps you to adapt to the coding style in which PHP is
authored. To extend PHP, you should quickly adapt to this style.