Saya masih ingat bahawa kali pertama saya menulis sambungan php adalah terus dari Baidu saya menulis sambungan berdasarkan Internet, tetapi Saya tidak tahu mengapa Mari kita lihat langkah asas sambungan dahulu, dan kemudian terokai prinsip di sebaliknya.
Gunakan alat kod sumber untuk menjana struktur direktori lanjutan secara automatik
Mula-mula masukkan direktori ext kod sumber php dan laksanakan arahan berikut
/www/test/php/php/bin/php ext_skel.php --ext helloworld cd helloworld
Ubah suai config.m4
Fail konfigurasi, iaitu, sama ada sambungan yang anda tulis sekarang menggunakan kebergantungan luaran, konfigurasikan pilihan --dengan-hello, jika tidak konfigurasikan pilihan --enable-hello
dan alih keluar komen mengikut keperluan anda sendiri
dnl If your extension references something external, use 'with': PHP_ARG_WITH([helloworld], [for helloworld support], [AS_HELP_STRING([--with-helloworld], [Include helloworld support])]) dnl Otherwise use 'enable':
fungsi sambungan Tulis
dan kemudian vim helloworld.c
tulis kod fungsi lanjutan
Mula-mula lihat definisi struktur modul
zend_module_entry helloworld_module_entry = { STANDARD_MODULE_HEADER, "helloworld", /* Extension name */ helloworld_functions, /* zend_function_entry */ PHP_MINIT(helloworld), /* PHP_MINIT - Module initialization */ NULL, /* PHP_MSHUTDOWN - Module shutdown */ PHP_RINIT(helloworld), /* PHP_RINIT - Request initialization */ NULL, /* PHP_RSHUTDOWN - Request shutdown */ PHP_MINFO(helloworld), /* PHP_MINFO - Module info */ PHP_HELLOWORLD_VERSION, /* Version */ PHP_MODULE_GLOBALS(pib), NULL, NULL, NULL, STANDARD_MODULE_PROPERTIES_EX };
Set nama fungsi fungsi
static const zend_function_entry helloworld_functions[] = { PHP_FE(helloworld_test1, arginfo_helloworld_test1) PHP_FE(helloworld_test2, arginfo_helloworld_test2) PHP_FE_END };
Kod fungsi fungsi sebenar
PHP_FUNCTION(helloworld_test2) { int argc = ZEND_NUM_ARGS(); char *messages = NULL; size_t messages_len = 0; char *context = NULL; size_t context_len = 0; zend_string *retval; ZEND_PARSE_PARAMETERS_START(0, 2) Z_PARAM_OPTIONAL Z_PARAM_STRING(messages, messages_len) Z_PARAM_STRING(context, context_len) ZEND_PARSE_PARAMETERS_END(); retval = strpprintf(0, "Hello %s test %s", messages, context); RETURN_STR(retval); }
Takrifan parameter fungsi
ZEND_BEGIN_ARG_INFO(arginfo_helloworld_test2, 0) ZEND_ARG_INFO(0, str) ZEND_END_ARG_INFO()
Kompil dan pasang
/www/test/php/php/bin/phpize ./configure --with-php-config=/www/test/php/php/bin/php-config make && make install
Ia kini berada dalam direktori sambungan PHP Dengan fail helloworld.so
, tambah konfigurasi sambungan dalam php.ini
extension = helloworld.so
dan kemudian anda boleh menguji fungsi yang anda menulis helloworld_test2()
; Selepas menyelesaikan sambungan, saya rasa saya tidak mempunyai apa-apa, saya tidak tahu prinsip mengapa ia ditulis seperti ini. Mari kita mulakan dengan pengenalan Kitaran hayat PHP Lihat Bahagian Seterusnya.
Pembelajaran yang disyorkan: "Tutorial Video PHP"