summaryrefslogtreecommitdiff
path: root/README.EXTENSIONS
blob: e802af8329afe3c745332a0a2992d6f74273ed76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
This file describes extension module API details. Refer to
README.EXT_SKEL to create extension skeleton files. Refer to
Hacker's Guide for PHP internals.

http://www.php.net/manual/en/internals2.php



Between PHP 4.0.6 and 4.1.0, the Zend module struct changed in a way
that broke both source and binary compatibility.  If you are
maintaining a third party extension, here's how to update it:

If this was your old module entry:

zend_module_entry foo_module_entry = {
    "foo",                /* extension name */
    foo_functions,        /* extension function list */
    NULL,                 /* extension-wide startup function */
    NULL,                 /* extension-wide shutdown function */
    PHP_RINIT(foo),       /* per-request startup function */
    PHP_RSHUTDOWN(foo),   /* per-request shutdown function */
    PHP_MINFO(foo),       /* information function */
    STANDARD_MODULE_PROPERTIES
};

Here's how it should look if you want your code to build with PHP
4.1.0 and up:

zend_module_entry foo_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
    STANDARD_MODULE_HEADER,
#endif
    "foo",                /* extension name */
    foo_functions,        /* extension function list */
    NULL,                 /* extension-wide startup function */
    NULL,                 /* extension-wide shutdown function */
    PHP_RINIT(foo),       /* per-request startup function */
    PHP_RSHUTDOWN(foo),   /* per-request shutdown function */
    PHP_MINFO(foo),       /* information function */
#if ZEND_MODULE_API_NO >= 20010901
    PHP_FOO_VERSION,      /* extension version number (string) */
#endif
    STANDARD_MODULE_PROPERTIES
};

If you don't care about source compatibility with earlier PHP releases
than 4.1.0, you can drop the #if/#endif lines.