1. Download PHP source code
wget HTTP://CN2.PHP.NET/DISTRIBUTIONS/PHP-5.6.10.TAR.GZTAR-ZXVF php-5.6.10.tar.gz
2. Establish an extended development framework./ext_skel--extname=helloworld
CD Php-5.6.10/ext/./ext_skel--extname=helloworldcreating directory helloworldcreating basic FILES:CONFIG.M4 Config.w32. Gitignore helloworld.c php_helloworld.h CREDITS experimental TESTS/001.PHPT helloworld.php [done]. To use your new extension and you'll have to execute the following steps:1. $ CD. 2. $ VI ext/helloworld/config.m43. $./buildconf4. $./configure--[with|enable]-helloworld5. $ make6. $./sapi/cli/php-f EXT/HELLOWORLD/HELLOWORLD.PHP7. $ VI ext/helloworld/helloworld.c8. $ makerepeat Steps 3-6 until you be satisfied with EXT/HELLOWORLD/CONFIG.M4 Andstep 6 confirms this your module is Compil Ed into PHP. Then, start Writingcode and repeat the last of the steps as often as necessary.
3, enter the root directory of PHP source code, edit the file vim ext/helloworld/config.m4
Get rid of the DNL in front of these lines of code
Php_arg_enable (HelloWorld, whether to ENABLE HelloWorld support,make sure so the comment is aligned:[--enable-hell Oworld Enable HelloWorld support])
4. Execute the command in the PHP source root directory./buildconf--force
Forcing buildconfremoving Configure cachesbuildconf:checking installation...buildconf:autoconf version 2.69 (OK) Rebuilding configurerebuilding main/php_config.h.in
5, PHP source code in the root directory compiled PHP program, note the command for./configure--with-helloworld
configure:warning:unrecognized options:--with-helloworldchecking for grep that handles long lines a Nd-e/bin/grepchecking for Egrep .../bin/grep-echecking for a sed to does not truncate output .../bin/sedchecking b Uild system Type ... x86_64-unknown-linux-gnuchecking host system type ... x86_64-unknown-linux-gnuchecking target system Type ... x86_64-unknown-linux-gnuchecking for cc ... Ccchecking whether the C compiler works ... yeschecking for C compiler default output file name ... a.outchecking for suffix of executables checking whether we is cross compiling ... nochecking for suffix of object files ... ochecking whether W E is using the GNU C compiler ... yeschecking whether cc accepts-g ... yeschecking for CC option to accept ISO C89 ... none Neededchecking How to run the C preprocessor ... cc-echecking for ... nochecking for SUNCC ... no ... The last error that appears, does not handle configure:error:xml2-config not found. Please check your LIBXML2 installation.
6,. Enter our extension directory HelloWorld, execute command phpize (install phpize via sudo apt-get install Php5-dev), at which point your extension directory generates many files that can be used for post-compilation.
CD php-5.6.10/ext/helloworldphpizeconfiguring for:php API Version: 20121113Zend Module API No: 20121212Zend Extension Api No: 220121212
7. Compile our extension in the HelloWorld directory./configure--with-php-config=/usr/bin/php-config (php-config with your own environment)--enable-helloworld
You can find the location of your php-config file via a command (Find/-name Php-config) as follows: My address is/usr/bin/php-config
./configure--with-php-config=/usr/bin/php-configchecking for grep that handles long lines and-e .../bin/grepchecking fo R egrep .../bin/grep-echecking for a sed to does not truncate output .../bin/sedchecking for cc ... Ccchecking whether the C compiler works ... yeschecking for C compiler default output file name ... a.outchecking for suffix of executables checking whether we is cross compiling ... nochecking for suffix of object files ... ochecking whether W E is using the GNU C compiler ... yeschecking whether cc accepts-g ... yeschecking for CC option to accept ISO C89 ... none Neededchecking How to run the C preprocessor ... cc-echecking for ... nochecking for SUNCC ... nochecking whether cc UN Derstands-c and-o together ... yeschecking for System library directory ... libchecking if compiler supports-r ..... .
8, enter the extension HelloWorld directory, edit the file php_helloworld.h, add function php_function (helloworldtest) in the last line;
Php_function (HelloWorldTest);
9. Open HELLOWORD.C with vim, implement our function in Helloworld.c, then add HelloWorldTest function to helloworld_functions[], save exit
Php_function (helloworldtest) { return_string ("Hello World!", 1);} Const Zend_function_entry helloworld_functions[] = { Php_fe (confirm_helloworld_compiled, NULL)/ * for testing, remove later. * /Php_fe (HelloWorldTest, NULL) php_fe_end/* Must is the last line in helloworld_functions[] */};
10, execute make command make compile extension, I run the process is still relatively smooth. If there is an error, please take a serious look at the previous step is wrong, I do the first time also wrong is generally the previous steps have a problem.
/bin/bash/php/php-5.6.10/ext/helloworld/libtool--mode=compile cc-i.-i/php/php-5.6.10/ext/helloworld-dphp_atom_ inc-i/php/php-5.6.10/ext/helloworld/include-i/php/php-5.6.10/ext/helloworld/main-i/php/php-5.6.10/ext/ helloworld-i/usr/include/php5-i/usr/include/php5/main-i/usr/include/php5/tsrm-i/usr/include/php5/zend-i/usr/ Include/php5/ext-i/usr/include/php5/ext/date/lib-dhave_config_h-g-o2-c/php/php-5.6.10/ext/helloworld/ Helloworld.c-o Helloworld.lo libtool:compile:cc-i.-i/php/php-5.6.10/ext/helloworld-dphp_atom_inc-i/php/ php-5.6.10/ext/helloworld/include-i/php/php-5.6.10/ext/helloworld/main-i/php/php-5.6.10/ext/helloworld-i/usr/ include/php5-i/usr/include/php5/main-i/usr/include/php5/tsrm-i/usr/include/php5/zend-i/usr/include/php5/ext-i/ Usr/include/php5/ext/date/lib-dhave_config_h-g-o2-c/php/php-5.6.10/ext/helloworld/helloworld.c-fpic-dpic-o. Libs/helloworld.o/bin/bash/php/php-5.6.10/ext/helloworld/libtool--mode=link cc-dphp_atom_inc-i/php/php-5.6.10/ext/helloworld/include-i/php/php-5.6.10/ext/helloworld/main-i/php/php-5.6.10/ext/helloworld-i/ usr/include/php5-i/usr/include/php5/main-i/usr/include/php5/tsrm-i/usr/include/php5/zend-i/usr/include/php5/ Ext-i/usr/include/php5/ext/date/lib-dhave_config_h-g-o2-o Helloworld.la-export-dynamic-avoid-version-prefer-pi C-module-rpath/php/php-5.6.10/ext/helloworld/modules Helloworld.lo libtool:link:cc-shared-fpic-dpic. Libs/hello World.o-o2-wl,-soname-wl,helloworld.so-o. Libs/helloworld.solibtool:link: (CD ". Libs" && rm-f "Hellowo Rld.la "&& ln-s". /helloworld.la "" helloworld.la ")/bin/bash/php/php-5.6.10/ext/helloworld/libtool--mode=install CP./helloworld.la/ PHP/PHP-5.6.10/EXT/HELLOWORLD/MODULESLIBTOOL:INSTALL:CP./.libs/helloworld.so/php/php-5.6.10/ext/helloworld/ MODULES/HELLOWORLD.SOLIBTOOL:INSTALL:CP./.libs/helloworld.lai/php/php-5.6.10/ext/helloworld/modules/ Helloworld.lalibtool:finish:path= "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/sbin "Ldconfig-n/php/php-5.6.10/ext/helloworld /modules----------------------------------------------------------------------Libraries has been installed in:/ Php/php-5.6.10/ext/helloworld/modulesif ever happen to want to link against installed Librariesin a given directory, L Ibdir, you must either use Libtool, andspecify the full pathname of the library, or use the '-llibdir ' flag during linking And do at least one of the following:-add Libdir to the ' ld_library_path ' environment variable during execution -Add Libdir to the ' Ld_run_path ' environment variable during linking-use the '-WL,-RPATH-WL,LIBDIR ' linker flag -The Your system administrator add Libdir to '/etc/ld.so.conf ' see all operating system documentation about shared LIBR Aries Formore information, such as the LD (1) and ld.so (8) Manual Pages.----------------------------------------------------------------------Build complete. Don ' tForget to run ' make test '.
11. Install PHP
Apt-get Install PHP5 php5-gd php5-cli
11. Copy the compiled helloworld.so file to your native PHP extension directory
Created: info.php content: Phpinfo ();p hp info.php | grep extenextension_dir =/usr/lib/php5/20121212 =/usr/lib/php5/20121212mbstring extension makes use of " Streamable Kanji Code Filter and Converter ", which is distributed under the GNU Lesser general public License version 2.1. root@4ccdc77255ea:/php/php-5.6.10/ext/helloworld# CP modules/helloworld.so/usr/lib/php5/20121212/
12. Configure PHP.ini to open helloworld.so extension
PHP info.php | grep php.iniloaded Configuration File =/etc/php5/cli/php.iniroot@4ccdc77255ea:/php# vim/etc/php5/cli/conf.d/ php.ini
13. Create echo.php
!--? php print_r (HelloWorldTest ()); Result: Hello world!
14. Problems encountered in Docker
1 apt-get install AUTOCONF2. GCC make and other dependent packages installation