After the LAMP configuration environment is completed in linux, you can perform php extension development.
Extension development in php is under the/ext folder of the source code package. We can see that there are already many well-developed extensions. For example, mysql and xml processing modules related to databases.
First, create a folder:
Mkdir hello
After entering this folder, create and open a configuration file:
Vim config. m4
Here is an example of configuration problems:
1 PHP_ARG_ENABLE(sample, whether to enable SAMPLE support,2 [ --enable-sample Enable SAMPLE support])3 if test "$PHP_SAMPLE" = "yes"; then4 AC_DEFINE(SAMPLE, 1, [Whether you have SAMPLE])5 PHP_NEW_EXTENSION(sample, sample.c, $ext_shared)6 fi
* This configuration file creates a -- enable-hello configuration option, and the second option of PHP_ARG_ENABLE is displayed during configuration.
* The third parameter of PHP_ARG_ENABLE is displayed when./configurehelp is called.
* Why sometimes enable-xxx and with-xxx are used? Enable can be disabled, but with requires additional third-party Libraries
* If -- enable-hello is configured, the $ PHP_HELLO parameter will be set to yes, and the following operations will be performed.
* PHP_NEW_EXTENSION is to declare all the required source files: PHP_NEW_EXTENSION (sample, sample. c sample2.c sample3.c, $ ext_shared)
* This is generally the case when the last parameter is building a shared module. $ Ext_shared
The following lists possible configuration options in the config file: * PHP_ARG_WITH or PHP_ARG_ENABLE specifies the working mode of the PHP extension module. The former means that no third-party library is required, and the latter is the opposite;
* PHP_REQUIRE_CXX is used to specify that the extension uses C ++;
* PHP_ADD_INCLUDE specifies the header file directory used by the PHP extension module;
* PHP_CHECK_LIBRARY specifies the PHP extension module PHP_ADD_LIBRARY_WITH_PATH definition and library connection error information;
* PHP_ADD_LIBRARY (stdc ++, "", EXTERN_NAME_LIBADD) is used to link the Standard C ++ Library to the extension
* PHP_SUBST (EXTERN_NAME_SHARED_LIBADD) indicates that the extension is compiled into a dynamic link library;
* PHP_NEW_EXTENSION is used to specify which source files should be compiled and separated by spaces;
Next we will look at the header file: php_sample.h
1? # Ifndef PHP_SAMPLE_H2/* prevents two accesses */3 # define PHP_SAMPLE_H4/* defines the extended nature */5 # define PHP_SAMPLE_EXTNAME "sample" 6 # define PHP_SAMPLE_EXTVER "1.0" 7 /* when building outside the php source code tree, introduce configuration options. When using the phpize tool, the */8 # ifdef HAVE_CONFIG_H9 # include "config. h "10 # endif11/* introduce the php standard header file */12 # include" php. h "13 PHP_FUNCTION (hello_world); // declare the function 14/* in the extension to define the entry point symbol. zend will use */15 extern zend_module_entry sample_module_entry when loading this module; 16 # define phpext_sample_ptr & sample_module_entry17 # endif/* PHP_SAMPLE_H */
At last, pay attention to two points: * php. h must be introduced.
* The Declaration zend_module_entry is declared as extern, so when the extension is extension = .. Zend can be found through dlopen () and dlsym.
Finally, let's look at the source file sample. c:
# Include "php_sample.h" static function_entry php_sample_functions [] = {PHP_FE (sample_hello_world, NULL) // all functions in any extension must be declared here. Output function name to user space {NULL, NULL, NULL}; zend_module_entry sample_module_entry = {// create an entry # if ZEND_MODULE_API_NO> = 20010901 // This is a version number STANDARD_MODULE_HEADER, # endif PHP_SAMPLE_EXTNAME, php_sample_functions,/* Functions add php_function to Zend */NULL,/* MINIT */NULL,/* MSHUTDOWN */NULL, /* RINIT */NULL,/* RSHUTDOWN */NULL,/* MINFO */# if ZEND_MODULE_API_NO >= 20010901 PHP_SAMPLE_EXTVER ,# Endif STANDARD_MODULE_PROPERTIES}; # ifdef COMPILE_DL_SAMPLEZEND_GET_MODULE (sample) # endif // when the extension is dynamically loaded, add a reference for Zend. Remember to add it. /* Real part of the function body */PHP_FUNCTION (sample_hello_world) {php_printf ("Hello World! \ N ");}
This is the content of the source code.
Next we need to generate the extension: phpize. /configure -- enable-samplemakesudo make install. ini: extension = sample. so, restart apachesudo/etc/init. d/httpd restart
Next, on the phpinfo page, check whether the extension sample already exists. If so, verify the extension in test. php below:
In addition to "Hello World! ", It indicates that the php extension development is successful.