We'll start with the creation of a very simple
extension at first, which basically does nothing more than
implement a function that returns the integer it receives as
parameter.
例28-1
shows the source.
This code contains a complete PHP module. We'll
explain the source code in detail shortly, but first we'd
like to discuss the build process. (This will allow the
impatient to experiment before we dive into API
discussions.)
注意 The example source makes use of some features introduced with the Zend version used in PHP 4.1.0 and above, it won't compile with older PHP 4.0.x versions.
There are basically two ways to compile
modules:
Use the provided "make" mechanism in the
ext
directory, which also allows building of dynamic loadable
modules.
Compile the sources manually.
The second method is good for those who (for
some reason) don't have the full PHP source tree available,
don't have access to all files, or just like to juggle with
their keyboard. These cases should be extremely rare, but for
the sake of completeness we'll also describe this method.
Compiling Using Make.
To compile the sample sources using the standard mechanism,
copy all their subdirectories to the
ext
directory of your PHP source tree. Then run
buildconf
, which will create an updated
configure
script containing appropriate options for the new
extension. By default, all the sample sources are disabled,
so you don't have to fear breaking your build process.
After you run
buildconf
,
configure --help
shows the following additional modules:
--enable-array_experiments BOOK: Enables array experiments --enable-call_userland BOOK: Enables userland module --enable-cross_conversion BOOK: Enables cross-conversion module --enable-first_module BOOK: Enables first module --enable-infoprint BOOK: Enables infoprint module --enable-reference_test BOOK: Enables reference test module --enable-resource_test BOOK: Enables resource test module --enable-variable_creation BOOK: Enables variable-creation module |
The module shown earlier in
例28-1
can be enabled with
--enable-first_module
or
--enable-first_module=yes
.
Compiling Manually.
To compile your modules manually, you need the following
commands:
Action | Command |
Compiling | cc -fpic -DCOMPILE_DL=1 -I/usr/local/include -I. -I.. -I../Zend -c -o your_object_file your_c_file |
Linking | cc -shared -L/usr/local/lib -rdynamic -o your_module_file your_object_file(s) |
Note:
All include paths in the example are relative to the
directory
ext
. If you're compiling from another directory, change the
pathnames accordingly. Required items are the PHP directory,
the
Zend
directory, and (if necessary), the directory in which your
module resides.
The link command is also a plain vanilla
command instructing linkage as a dynamic module.
You can include optimization options in the
compilation command, although these have been omitted in this
example (but some are included in the makefile template
described in an earlier section).
Note:
Compiling and linking manually as a static module into the
PHP binary involves very long instructions and thus is not
discussed here. (It's not very efficient to type all those
commands.)