C語言PHP的helloworld擴充

來源:互聯網
上載者:User

標籤:

1、下載php源碼

wget http://cn2.php.net/distributions/php-5.6.10.tar.gztar -zxvf php-5.6.10.tar.gz

2、建立擴充開發架構 ./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, you will 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 are satisfied with ext/helloworld/config.m4 andstep 6 confirms that your module is compiled into PHP. Then, start writingcode and repeat the last two steps as often as necessary.

3、進入php源碼的根目錄, 編輯檔案 vim ext/helloworld/config.m4

去掉這幾行代碼前面的dnl
PHP_ARG_ENABLE(helloworld, whether to enable helloworld support,Make sure that the comment is aligned:[  --enable-helloworld           Enable helloworld support])

4、在php源碼根目錄執行命令 ./buildconf --force

Forcing buildconfRemoving configure cachesbuildconf: checking installation...buildconf: autoconf version 2.69 (ok)rebuilding configurerebuilding main/php_config.h.in

5、在php源碼的根目錄編譯php程式,注意命令為 ./configure --with-helloworld

configure: WARNING: unrecognized options: --with-helloworldchecking for grep that handles long lines and -e... /bin/grepchecking for egrep... /bin/grep -Echecking for a sed that does not truncate output... /bin/sedchecking build 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 are cross compiling... nochecking for suffix of object files... ochecking whether we are 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 icc... nochecking for suncc... no......最後出現的error,沒有處理configure: error: xml2-config not found. Please check your libxml2 installation.

6、進入我們的擴充目錄helloworld,執行命令 phpize(通過 sudo apt-get install php5-dev 安裝 phpize),此時你的擴充目錄會產生很多檔案,可以用於後期編譯。

cd php-5.6.10/ext/helloworldphpizeConfiguring for:PHP Api Version:         20121113Zend Module Api No:      20121212Zend Extension Api No:   220121212

7、在helloworld目錄編譯我們的擴充 ./configure --with-php-config=/usr/bin/php-config(使用你自己環境的php-config) --enable-helloworld

     你可以通過一條命令尋找你的php-config檔案的位置(find / -name php-config)如下:我的地址為/usr/bin/php-config

./configure --with-php-config=/usr/bin/php-configchecking for grep that handles long lines and -e... /bin/grepchecking for egrep... /bin/grep -Echecking for a sed that 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 are cross compiling... nochecking for suffix of object files... ochecking whether we are 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 icc... nochecking for suncc... nochecking whether cc understands -c and -o together... yeschecking for system library directory... libchecking if compiler supports -R... no......

8、進入擴充helloworld目錄,編輯檔案php_helloworld.h,在最後一行添加函數PHP_FUNCTION(helloworldTest);

PHP_FUNCTION(helloworldTest);

9、用vim 開啟helloword.c,在helloworld.c中實現我們的函數,之後 將helloworldTest函數加入到helloworld_functions[]中,儲存退出

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 be the last line in helloworld_functions[] */};

10、執行make命令 make 編譯擴充,我在啟動並執行過程中還是比較順利的。如果出現錯誤,請認真看前面步驟是否有錯,我在第一遍做的時候也有錯一般都是前面步驟有問題。

/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-pic -module -rpath /php/php-5.6.10/ext/helloworld/modules  helloworld.lo libtool: link: cc -shared  -fPIC -DPIC  .libs/helloworld.o    -O2   -Wl,-soname -Wl,helloworld.so -o .libs/helloworld.solibtool: link: ( cd ".libs" && rm -f "helloworld.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 have been installed in:   /php/php-5.6.10/ext/helloworld/modulesIf you ever happen to want to link against installed librariesin a given directory, LIBDIR, 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   - have your system administrator add LIBDIR to `/etc/ld.so.conf‘See any operating system documentation about shared libraries formore information, such as the ld(1) and ld.so(8) manual pages.----------------------------------------------------------------------Build complete.Don‘t forget to run ‘make test‘.

11、安裝php

apt-get install php5 php5-gd php5-cli

11、將編譯產生的helloworld.so 檔案複製到你原生php擴充目錄

建立:info.php內容:phpinfo();php 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.[email protected]:/php/php-5.6.10/ext/helloworld# cp modules/helloworld.so /usr/lib/php5/20121212/

12、配置php.ini 開啟 helloworld.so 擴充

php info.php | grep php.iniLoaded Configuration File => /etc/php5/cli/php.ini[email protected]:/php# vim /etc/php5/cli/conf.d/  php.ini

13、建立echo.php

<?php    print_r(helloworldTest());    結果:Hello World !

14、Docker中遇到的問題

1. apt-get install autoconf2. gcc make等依賴包安裝









C語言PHP的helloworld擴充

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.