[תһƪ±È½ÏÀϵÄÎÄÕÂ]±àд×Ô¼ºµÄphpÀ©Õ¹º¯Êý-PHP¼¼Êõ-3P´úÂëÍø
¡¾·±ÌåÖÐÎÄ¡¿
¡¾ÉèΪÊ×Ò³¡¿
¡¾¼ÓÈëÊղء¿
µ±Ç°Î»ÖãºPHP¼¼ÊõÊ×Ò³ >> PHP»ù´¡ >> [תһƪ±È½ÏÀϵÄÎÄÕÂ]±àд×Ô¼ºµÄphpÀ©Õ¹º¯Êý

[תһƪ±È½ÏÀϵÄÎÄÕÂ]±àд×Ô¼ºµÄphpÀ©Õ¹º¯Êý

2005-01-15 08:00:00  ×÷Õߣº  À´Ô´£º»¥ÁªÍø  ä¯ÀÀ´ÎÊý£º0  ÎÄ×Ö´óС£º¡¾´ó¡¿¡¾ÖС¿¡¾Ð¡¡¿
¼ò½é£º×÷Õß: Æ®ÔÚËÄ·½ ±¾ÈË»¹Ã»²âÊÔ¹ý£¬ÓÐÐËȤµÄ¿ÉÒÔ²âÊÔÏ Yorgo Sun 2002/01/22 PHP³ÌÐòдµÄʱ¼ä³¤ÁË£¬×ÔÈ»¶ÔËûËùÌṩµÄ¹¦ÄÜÁËÈçÖ¸ÕÆ£¬ËûËùÌṩµÄÒ»´ó¶Ñ¹¦ÄÜ£¬ÕæÊǾõµÃºÜºÃÓ㬵«ÓÐʱºò»á·¢ÏÖPHPҲȱÉÙһЩ¹¦ÄÜ£¬×Ô¼º...
¹Ø¼ü×Ö£ºº¯Êý ×Ô¼º ÎÄÕ php

×÷Õß: Æ®ÔÚËÄ·½

±¾ÈË»¹Ã»²âÊÔ¹ý£¬ÓÐÐËȤµÄ¿ÉÒÔ²âÊÔÏÂ

Yorgo Sun 2002/01/22

PHP³ÌÐòдµÄʱ¼ä³¤ÁË£¬×ÔÈ»¶ÔËûËùÌṩµÄ¹¦ÄÜÁËÈçÖ¸ÕÆ£¬ËûËùÌṩµÄÒ»´ó¶Ñ¹¦ÄÜ£¬ÕæÊǾõµÃºÜºÃÓ㬵«ÓÐʱºò»á·¢ÏÖPHPҲȱÉÙһЩ¹¦ÄÜ£¬×Ô¼º×ÜÊÇ»á²úÉúΪPHPÌí¼ÓһЩ×Ô¶¨ÒåµÄ¹¦ÄܵÄÏë·¨¡£¾Ã¶ø¾ÃÖ®£¬ÖÕÓÚ½ñÌì±ï²»×¡ÁË£¬¿ªÊ¼¶¯ÊÖÑо¿ÈçºÎÌí¼Ó¡£

ÏÂÔØÒ»¸öPHPµÄÔ´´úÂë°ü£¬ÕâÀïʹÓõÄÊÇPHP 4.0.5°æ£¬½âѹºó»á¿´µ½PHPµÄ¸ùĿ¼Ï»áÓÐREADME.EXT_SKELÕâÑùÒ»¸öÎļþ£¬´ò¿ªÏêϸÔĶÁÁËһϣ¬·¢ÏÖÁËÒ»¸ö·Ç³£ºÃÓõŤ¾ß£¬Õâ¸ö¹¤¾ß¿ÉÒÔ°ïÄã¹¹½¨Ò»¸ö¿ÕµÄPHPÀ©Õ¹£¬È»ºóÄãÏòÀïÃæÌí¼ÓÏàÓ¦µÄ´úÂë¾Í¿ÉÒÔÍê³ÉÄã×Ô¼ºµÄ¹¦ÄÜÀ©Õ¹ÁË¡£ÏÂÃæÎÒÃǾÍÀ´½éÉÜÈçºÎʹÓÃÕâ¸ö¹¤¾ß¡£

Ê×ÏÈ×ªÒÆÄãµÄĿ¼µ½PHPµÄĿ¼ÏµÄextĿ¼£¬Èç¹ûÄãÖ»ÐèÒªÒ»¸ö»ù±¾µÄÀ©Õ¹¿ò¼ÜµÄ»°£¬Ö´ÐÐÏÂÃæµÄÃüÁ

./ext_skel --extname=module_name

module_nameÊÇÄã×Ô¼º¿ÉÒÔÑ¡ÔñµÄÀ©Õ¹Ä£¿éµÄÃû×Ö£¬ÀýÈçÎÒÑ¡ÔñµÄmy_module¡£Ö´Ðй¤¾ßºó»á×Ô¶¯ÔÚextĿ¼Ï½¨Á¢ÄãÑ¡ÔñµÄmodule_nameÃû×ÖµÄĿ¼£¬ÀïÃæÒѾ­Éú³ÉÁËÏà¹ØµÄ´úÂ룬ÕâЩ´úÂëÖÐÖ»ÐèÒªµ÷Õûconfig.m4ÎļþÖеÄÈýÐÐ×¢Ê;ͿÉÒÔÕý³£µÄ±àÒë´øÕâ¸ö×Ô¶¨ÒåÀ©Õ¹Ä£¿éµÄPHPÁË¡£ÔÚPHPµÄ¸ùĿ¼ִÐÐÏÂÁвÙ×÷¾Í¿ÉÒԵõ½¡£

./buildconf

./configure --enable-module_name

make

ÏÂÃæÎÒÀ´ÑÝʾ½¨Á¢my_moduleÀ©Õ¹¿ò¼ÜµÄÈ«¹ý³Ì£¬ÎªÁ˸üÓÐЧ¹û£¬ÎÒÃÇÀ´Íê³ÉÒ»¸öPHPµÄÀ©Õ¹¹¦ÄÜ£¬ÔÚPHPÖе÷ÓÃÕâ¸ö¹¦ÄÜ¿ÉÒÔÔÚwebÒ³ÃæÖÐÏÔʾhello worldÕâ¸ö¾­µäµ¥´Ê¡£

ÔÚPHPĿ¼ÏµÄextĿ¼ÖУ¬Ö´ÐÐÏÂÃæµÄÃüÁî

./ext_skel --extname=my_module

µÃµ½·´À¡½á¹û£º

Creating directory my_module

Creating basic files: config.m4 Makefile.in .cvsignore my_module.c PHP_my_module.h tests/001.PHPt my_module.PHP [done].

To use your new extension, you will have to execute the following steps:

1. $ cd ..

2. $ vi ext/my_module/config.m4

3. $ ./buildconf

4. $ ./configure --[with|enable]-my_module

5. $ make

6. $ ./PHP -f ext/my_module/my_module.PHP

7. $ vi ext/my_module/my_module.c

8. $ make

Repeat steps 3-6 until you are satisfied with ext/my_module/config.m4 and

step 6 confirms that your module is compiled into PHP. Then, start writing

code and repeat the last two steps as often as necessary.

Èç¹ûÄãÄÜ¿´¶®ÉÏÃæµÄ¶«Î÷£¬ÄǾÍÕÕ×ÅÈ¥×ö¡£Èç¹û²»ÊÇÌ«Ã÷°×µÄ»°£¬°´ÕÕÎÒÏÂÃæµÄÌáʾÀ´×öÒ²¿ÉÒÔ¡£

Cd my_module

Ê×ÏȽøÈëmy_moduleĿ¼

vi config.m4

ʹÓÃÎı¾±à¼­Æ÷´ò¿ªconfig.m4Îļþ£¬ÎļþÄÚÈÝ´óÖÂÈçÏ£º

dnl $Id$

dnl config.m4 for extension my_module

dnl don't forget to call PHP_EXTENSION(my_module)

dnl Comments in this file start with the string 'dnl'.

dnl Remove where necessary. This file will not work

dnl without editing.

dnl If your extension references something external, use with:

dnl PHP_ARG_WITH(my_module, for my_module support,

dnl Make sure that the comment is aligned:

dnl [ --with-my_module Include my_module support])

dnl Otherwise use enable:

dnl PHP_ARG_ENABLE(my_module, whether to enable my_module support,

dnl Make sure that the comment is aligned:

dnl [ --enable-my_module Enable my_module support])

if test "$PHP_MY_MODULE" != "no"; then

dnl If you will not be testing anything external, like existence of

dnl headers, libraries or functions in them, just uncomment the

dnl following line and you are ready to go.

dnl Write more examples of tests here...

PHP_EXTENSION(my_module, $ext_shared)

Fi

¸ù¾ÝÄã×Ô¼ºµÄÑ¡Ôñ½«

dnl PHP_ARG_WITH(my_module, for my_module support,

dnl Make sure that the comment is aligned:

dnl [ --with-my_module Include my_module support])

Ð޸ijÉ

PHP_ARG_WITH(my_module, for my_module support,

Make sure that the comment is aligned:

[ --with-my_module Include my_module support])

»òÕß½«

dnl PHP_ARG_ENABLE(my_module, whether to enable my_module support,

dnl Make sure that the comment is aligned:

dnl [ --enable-my_module Enable my_module support])

Ð޸ijÉ

PHP_ARG_ENABLE(my_module, whether to enable my_module support,

Make sure that the comment is aligned:

[ --enable-my_module Enable my_module support])

Ò»°ãÎÒ»áÑ¡ÔñºóÕߣ¬È»ºó±£´æÍ˳ö¡£Èç¹ûÄã¶ÔviÎı¾±à¼­Æ÷µÄ²Ù×÷ÓÐÀ§Äѵϰ£¬Çë²Î¿¼ÏàÓ¦µÄ˵Ã÷ÎÄÕ£¬ÕâÀï¾Í²»ÔÙÏêϸÃèÊöÁË¡£

Vi my_module.c

½«ÎļþÆäÖеÄÏÂÁдúÂë½øÐÐÐÞ¸Ä

/* Every user visible function must have an entry in my_module_functions[].

*/

function_entry my_module_functions[] = {

PHP_FE(say_hello, NULL) /* ßÌí¼Ó×ÅÒ»ÐдúÂë */

PHP_FE(confirm_my_module_compiled, NULL) /* For testing, remove later. */

{NULL, NULL, NULL} /* Must be the last line in my_module_functions[] */

};

ÔÚÎļþµÄ×îºóÌí¼ÓÏÂÁдúÂë

PHP_FUNCTION(say_hello)

{

zend_printf("hello world\n");

}

±£´æÎļþÍ˳ö

vi PHP_my_module.h

ÔÚÎļþÖÐPHP_FUNCTION(confirm_my_module_compiled);Ò»ÐÐÇ°ÃæÌí¼ÓÏÂÃæµÄ´úÂë

PHP_FUNCTION(say_hello);

±£´æÎļþÍ˳ö

Í˻ص½PHPµÄ¸ùĿ¼Ï£¬Ö´ÐÐÏÂÃæµÄÃüÁî

./buildconf

./configure --enable-my_module

make

Èç¹ûÒ»ÇÐ˳ÀûµÄ»°£¬ÎÒÃÇÏÖÔÚÒѾ­½«À©Õ¹Ä£¿émy_module±àÒëµ½PHPÀïÃæÁË¡£ÎÒÃDZàдÏÂÃæµÄ´úÂë½øÐвâÊÔ

±£´æÎļþΪsay_hello.PHP

ÔÚPHPµÄ¸ùĿ¼ÏÂÔËÐÐ

./PHP ¨Cq say_hello.PHP

Õý³£Çé¿öÏ»áÏÔʾ

hello world

±íʾÎÒÃǵĵÚÒ»¸öÀ©Õ¹Õý³£µÄÔËÐÐÁË£¡

½âÊÍÒ»ÏÂÉÏÃæ×öµÄ²Ù×÷£¬ext_skelÉú³ÉһЩ¿òÏÂÎļþ£¬ÎÒÃÇÐèÒªÐÞ¸ÄÒÔÏÂÎļþ

my_module.c À©Õ¹Ä£¿éµÄÖ÷³ÌÐò

PHP_my_module.h À©Õ¹Ä£¿éµÄÍ·Îļþ

config.m4 ÅäÖÃÎļþ

Ö÷³ÌÐòÖÐÃèÊöÁËPHPÀ©Õ¹Ä£¿éµÄÉùÃ÷£¬Ä£¿éÖк¬ÓжàÉÙ¸öº¯Êý£¬¸÷¸öº¯ÊýµÄ×÷Óã¬ÔÚPHPinfoº¯ÊýÖÐÏÔʾʲôÄÚÈÝ£¬Ä£¿é³õʼ»¯×öЩʲô£¬½áÊø×öЩʲô¶¼»áÔÚÕâ¸öÎļþÀï½øÐÐÃèÊö¡£ÎÒÃÇÔÚÉÏÃæÖ»ÊÇÌí¼ÓÁËÒ»¸öº¯Êýsay_hello£¬²¢ÇÒÃèÊöÁËsay_helloº¯ÊýµÄ¾ßÌåÄÚÈÝ£¬µ÷ÓÃzend_printfϵͳº¯ÊýÔÚPHPÖдòÓ¡×Ö·û´®¡£

ÔÚ¶ÔÓ¦µÄÍ·ÎļþÖÐÉùÃ÷ÁËsay_helloÕâ¸öº¯Êý£¬´Ó¶øÍê³ÉÁËÎÒÃÇÔ¤ÆÚµÄ¹¦ÄÜ¡£ÏÂÃæÎÒÃÇ»á±àдһ¸ö¸ü¸´ÔÓµÄÀ©Õ¹£¬´´ÔìÒ»¸ö´ø²ÎÊýµÄPHPÀ©Õ¹º¯Êý£¬¸ù¾Ý¸øÈëµÄ²ÎÊý£¬ÏÔʾhello world, xxxx¡£Xxxx´ú±íÊäÈëµÄ×Ö·û´®ÄÚÈÝ£¬ÀýÈçÎÒµÄÃû×Öyorgo¡£

Vi my_module.c

ÐÞ¸Ä×îºóµÄsay_helloº¯ÊýÄÚÈÝÈçÏ£º

PHP_FUNCTION(say_hello)

{

zval **yourname;

if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &yourname) == FAILURE)

{

WRONG_PARAM_COUNT;

}

zend_printf("hello world, %s\n", Z_STRVAL_PP(yourname));

}

´æÅÌÍ˳ö¡£

ÍË»ØPHPµÄ¸ùĿ¼£¬ÔËÐÐ

make

ÐÞ¸Äsay_hello.PHPΪ

±£´æÍ˳öºóÔËÐÐ

./PHP ¨Cq say_hello.PHP

µÃ³ö½á¹û

hello world, yorgo

±íʾÎÒÃÇÕâ´ÎµÄÐÞ¸ÄÒ²³É¹¦ÁË£¬¿ÉÒԸıäsay_helloÖеIJÎÊý£¬¿´¿´¶¯Ì¬µÄЧ¹û¡£

ÕâÀïÖ÷Òª½âÊÍÉÏÃæÐ޸ĵĺ¯ÊýÄÚÈÝ£¬ÓÉÓÚsay_helloº¯ÊýÐèÒªÓвÎÊýÒýÈ룬ËùÒÔÔÚmy_module.cÖеÄsay_helloº¯ÊýÖ÷ÒªÔÚ½øÐвÎÊýµÄ´¦Àí£¬½«PHPÖÐÒýÓÃsay_helloʱËùÌîдµÄ²ÎÊýÄÚÈÝÕýÈ·µÄ´«µÝµ½my_module.cÖеÄsay_hello´¦Àíº¯ÊýÖС£Îª´Ë£¬³ÌÐòÖÐÌí¼ÓÁËÕâô¼¸ÐС£

zval **yourname;

if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &yourname) == FAILURE)

{

WRONG_PARAM_COUNT;

}

zend_printf("hello world, %s\n", Z_STRVAL_PP(yourname));

´úÂë½âÊÍÈçÏ£º

zval **yourname;

³õʼ»¯Ò»¸ö²ÎÊýµÄÖ¸Õë

ZEND_NUM_ARGS()

µÃµ½´«µÝ¹ýÀ´µÃ²ÎÊýÊýÁ¿£¬²¢ÇÒÅжÏÈç¹û²»Îª1µÄʱºò±íʾÓÐÎÊÌ⣬±¨´í¡£

zend_get_parameters_ex(1, &yourname)

½«¸Õ¸Õ³õʼ»¯µÄÖ¸ÕëÖ¸Ïò´«µÝ¹ýÀ´µÄ²ÎÊý£¬Èç¹û²»³É¹¦Ôò±¨´í¡£

Z_STRVAL_PP(yourname)

´¦ÀíÖ¸ÕëÖ¸ÏòµÄ²ÎÊý²¢»ñµÃʵ¼Ê´æ´¢µÄÖµ¡£

(´ýÐø)

ÔðÈα༭£ºadmin
±¾ÎÄÒýÓõØÖ·£º http://www.3pcode.com/php/2005/01/12259.htm
Ïà¹ØÎÄÕÂ