Cara menggunakan C++ untuk membangunkan sambungan PHP7/8 dan berinteraksi dengan sambungan lain
Pengenalan:
PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas Dengan membangunkan sambungan PHP, kami boleh menambah beberapa penyesuaian pada Fungsi PHP dan ciri. Artikel ini akan memperkenalkan cara menggunakan C++ untuk membangunkan sambungan PHP7/8 dan menunjukkan cara berinteraksi dengan sambungan lain.
1. Persediaan:
Sebelum anda bermula, pastikan anda telah menyediakan persekitaran pembangunan PHP7/8 dan mempunyai pengetahuan pengaturcaraan C++ tertentu.
2. Buat sambungan:
Pertama, kita perlu mencipta folder untuk menyimpan kod sumber sambungan. Jalankan arahan berikut dalam baris arahan:
mkdir myextension cd myextension
Buat fail bernama myextension.cpp dalam folder myextension sebagai fail masukan sambungan. Dalam fail ini kami akan menulis struktur asas dan fungsi sambungan. Kod contoh
myextension.cpp adalah seperti berikut:
#include "php_myextension.h" zend_function_entry myextension_functions[] = { PHP_FE(myextension_hello, NULL) {NULL, NULL, NULL} }; zend_module_entry myextension_module_entry = { STANDARD_MODULE_HEADER, "myextension", myextension_functions, NULL, NULL, NULL, NULL, NULL, PHP_MYEXTENSION_VERSION, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_MYEXTENSION #ifdef ZTS ZEND_TSRMLS_CACHE_DEFINE() #endif ZEND_GET_MODULE(myextension) #endif PHP_FUNCTION(myextension_hello) { php_printf("Hello from myextension!"); }
Buat fail bernama config.m4 dalam folder myextension untuk mengkonfigurasi pilihan kompilasi sambungan. Kod sampel
config.m4 adalah seperti berikut:
PHP_ARG_ENABLE(myextension, whether to enable myextension support, [ --enable-myextension Enable myextension support]) if test "$PHP_MYEXTENSION" = "yes"; then AC_DEFINE(PHP_MYEXTENSION_ENABLED, 1, [Whether myextension support is enabled]) PHP_NEW_EXTENSION(myextension, myextension.cpp, $ext_shared) fi PHP_SUBST(MYEXTENSION_SHARED_LIBADD)
Buat fail bernama php_myextension.h dalam folder myextension untuk mentakrifkan fungsi lanjutan dan makro.
kod sampel php_myextension.h adalah seperti berikut:
#ifndef PHP_MYEXTENSION_H #define PHP_MYEXTENSION_H extern zend_module_entry myextension_module_entry; #define phpext_myextension_ptr &myextension_module_entry #define PHP_MYEXTENSION_VERSION "1.0.0" PHP_FUNCTION(myextension_hello); #endif
Buat fail bernama myextension.ini dalam direktori sambungan PHP untuk mengkonfigurasi kelakuan sambungan myextension.
Kod sampel Myextension.ini adalah seperti berikut:
extension=myextension.so
Seterusnya, kami perlu menyusun dan memasang sambungan kami. Jalankan arahan berikut dalam baris arahan:
phpize ./configure --enable-myextension make sudo make install
Jika semuanya berjalan lancar, fail sambungan bernama myextension.so akan dijana selepas penyusunan Salin fail ke direktori sambungan PHP dan dayakan sambungan dalam fail php.ini.
3 Berinteraksi dengan sambungan lain:
Selepas sambungan dibangunkan, kami boleh berinteraksi dengan sambungan lain melalui fungsi dan pembolehubah global yang disediakan oleh sambungan. Berikut ialah contoh berinteraksi dengan sambungan zlib:
Tambah rujukan fail pengepala pada permulaan fail:
#include <zlib.h>
Panggil fungsi zlib dalam fungsi myextension_hellorrree:
PHP_FUNCTION(myextension_hello) { unsigned long sourceLen = 200; char source[] = "Hello from myextension!"; unsigned long destLen = compressBound(sourceLen); char* dest = (char*)malloc(destLen); compress((Bytef*)dest, &destLen, (const Bytef*)source, sourceLen); php_printf("Compressed string: %s", dest); free(dest); }
<?php echo myextension_hello(); ?>
php test.php
Atas ialah kandungan terperinci Cara menggunakan C++ untuk membangunkan sambungan PHP7/8 dan berinteraksi dengan sambungan lain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!