PHP扩展开发(一)
首先需要确定系统中安装了gcc编译器,合适版本的bison等,下面是从源码编译安装PHP需要执行的基本命令:
# cd php-src# ./buildconf# ./configure --enable-debug --enable-maintainer-zts --enable-cli# make# make install
构建一个基本的扩展骨架
在PHP扩展开发时,使用ext_skel完成扩展的结构骨架创建。
$ ./ext_skel./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]] [--skel=dir] [--full-xml] [--no-help] --extname=module 这里的module是要创建的扩展名称 --proto=file 这里的file文件包含了要创建的函数的原型 --stubs=file generate only function stubs in file --xml generate xml documentation to be added to phpdoc-cvs --skel=dir 创建扩展骨架的目录 --full-xml generate xml documentation for a self-contained extension (not yet implemented) --no-help don't try to be nice and create comments in the code and helper functions to test if the module compiled
注意: ext_skel命令文件在源文件的ext目录下。
这里的--extname参数是要创建的扩展名称,扩展名称为 小写字母 + 下划线 组成,并且,
在ext目录中必须是唯一的。
例如,这里要创建一个名为ext_demo_1的PHP扩展:
/vagrant/ext$ ./ext_skel --extname=ext_demo_1Creating directory ext_demo_1Creating basic files: config.m4 config.w32 .svnignore ext_demo_1.c php_ext_demo_1.h CREDITS EXPERIMENTAL tests/001.phpt ext_demo_1.php [done].To use your new extension, you will have to execute the following steps:
$ cd ..
$ vi ext/extdemo1/config.m4
$ ./buildconf
$ ./configure --[with|enable]-extdemo1
$ make
$ ./php -f ext/extdemo1/extdemo1.php
$ vi ext/extdemo1/extdemo1.c
$ make
Repeat steps 3-6 until you are satisfied with ext/extdemo1/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.
现在,在ext目录下出现了一个新建的扩展目录ext_demo_1:
/vagrant/ext/ext_demo_1$ lsconfig.m4 CREDITS ext_demo_1.c php_ext_demo_1.hconfig.w32 EXPERIMENTAL ext_demo_1.php tests
这时,该扩展是无法编译通过的,需要先编辑config.m4文件才行。
配置文件config.m4
配置文件config.m4告诉UNIX构建系统扩展支持的configure选项以及扩展需要的额外的库,
包含哪些源文件等,该文件使用的是GNU的autoconf语法,以dnl开头的行为注释,使用中括号([和])包含的为字符串。
autoconf语法参见 AUTOCONF文档
PHP_ARG_ENABLE(ext_demo_1, whether to enable ext_demo_1 support,[ --enable-ext_demo_1 Enable ext_demo_1 support])if test "$PHP_EXT_DEMO_1" != "no"; then PHP_SUBST(EXT_DEMO_1_SHARED_LIBADD) PHP_NEW_EXTENSION(ext_demo_1, ext_demo_1.c, $ext_shared)fi
上述为autoconf的配置文件,第一个宏PHP_ARG_ENABLE,含有三个参数:
extdemo1 这是第一个参数,为./configure建立了名为enable-ext_demo_1的选项
第二个参数将会在./configure命令处理到该扩展的配置文件时,显示该参数的内容
第三个参数是./configure命令的帮助,在使用./configure --help的时候显示
第二个宏为PHP_NEW_EXTENSION,该宏声明了扩展的模块和必须要编译作为扩展一部分的源码文件。
如果需要多个源文件,则使用空格分隔,第三个参数$ext_shared与调用
PHP_SUBST(EXT_DEMO_1_SHARED_LIBADD)有关。
PHP_NEW_EXTENSION(ext_demo_1, ext_demo_1.c, $ext_shared)
编译扩展
修改完config.m4文件之后,接下来编译PHP和扩展。
/vagrant$ ./configure --disable-libxml --enable-ext_demo_1 --disable-dom --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --without-pear --prefix=/usr/local/php/vagrant$ make/vagrant$ sudo make installInstalling PHP SAPI module: cgiInstalling PHP CGI binary: /usr/local/php/bin/Installing PHP CLI binary: /usr/local/php/bin/Installing PHP CLI man page: /usr/local/php/man/man1/Installing build environment: /usr/local/php/lib/php/build/Installing header files: /usr/local/php/include/php/Installing helper programs: /usr/local/php/bin/ program: phpize program: php-configInstalling man pages: /usr/local/php/man/man1/ page: phpize.1 page: php-config.1/vagrant/build/shtool install -c ext/phar/phar.phar /usr/local/php/binln -s -f /usr/local/php/bin/phar.phar /usr/local/php/bin/pharInstalling PDO headers: /usr/local/php/include/php/ext/pdo/
此时,PHP安装在了/usr/local/php目录下,进入该目录,可以看到如下文件:
/usr/local/php$ lsbin include lib man
进入/usr/local/php/bin目录,执行以下命令:
/usr/local/php/bin$ ./php --info|grep demoConfigure Command => './configure' '--disable-libxml' '--enable-ext_demo_1' '--disable-dom' '--disable-simplexml' '--disable-xml' '--disable-xmlreader' '--disable-xmlwriter' '--without-pear' '--prefix=/usr/local/php'ext_demo_1ext_demo_1 support => enabled
可以看到,phpinfo()中扩展支持已经启用了,按照上述步骤安装的扩展中包含了一个测试扩展是否能够正常工作的函数,
该函数名为confirm_ext_demo_1_compiled(arg),执行结果如下:
/usr/local/php/bin$ ./php -r "echo confirm_ext_demo_1_compiled('mylxsw');"Congratulations! You have successfully modified ext/ext_demo_1/config.m4. Module mylxsw is now compiled into PHP.
可以看到,ext_demo_1扩展安装成功了,关于扩展开发更多内容,请移步 AICODE.CC.

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Alipay Php ...

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Menghantar data JSON menggunakan perpustakaan Curl PHP dalam pembangunan PHP, sering kali perlu berinteraksi dengan API luaran. Salah satu cara biasa ialah menggunakan perpustakaan curl untuk menghantar post ...
