| ||||||||||
Kapitola 28. Creating Extensions
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. Listing 9.3 shows the source. Obrßzek 28-1. Listing 9.3. A simple extension.
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.) Compiling ModulesThere are basically three ways to compile modules:
The make process contained in the dl directory is a bit of a dirty hack, outdated and planned for removal from the source tree. To be honest, it's much simpler to use this at first to build dynamic extensions, but because it doesn't have the possibilities of the ext directory and it's scheduled for deletion anyway, usage of the dl directory is deprecated. The third 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 a new configure script containing appropriate options. 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:
Compiling Manually. To compile your modules manually, you need the following commands: The command to compile the module simply instructs the compiler to generate position-independent code (-fpic shouldn't be omitted) and additionally defines the constant COMPILE_DL to tell the module code that it's compiled as a dynamically loadable module (the test module above checks for this; we'll discuss it shortly). After these options, it specifies a number of standard include paths that should be used as the minimal set to compile the source files.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.) | ||||||||||
|