Inhaltsverzeichnis
构建一个基本的扩展骨架
配置文件config.m4
编译扩展
Heim Backend-Entwicklung PHP-Tutorial PHP扩展开发(一)

PHP扩展开发(一)

Jun 23, 2016 pm 01:27 PM

首先需要确定系统中安装了gcc编译器,合适版本的bison等,下面是从源码编译安装PHP需要执行的基本命令:

# cd php-src# ./buildconf# ./configure --enable-debug --enable-maintainer-zts --enable-cli# make# make install
Nach dem Login kopieren

构建一个基本的扩展骨架

在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
Nach dem Login kopieren

注意: 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:
Nach dem Login kopieren
  • $ 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
    Nach dem Login kopieren

    这时,该扩展是无法编译通过的,需要先编辑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
    Nach dem Login kopieren

    上述为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)
    Nach dem Login kopieren

    编译扩展

    修改完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/
    Nach dem Login kopieren

    此时,PHP安装在了/usr/local/php目录下,进入该目录,可以看到如下文件:

    /usr/local/php$ lsbin  include  lib  man
    Nach dem Login kopieren

    进入/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
    Nach dem Login kopieren

    可以看到,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.
    Nach dem Login kopieren

    可以看到,ext_demo_1扩展安装成功了,关于扩展开发更多内容,请移步 AICODE.CC.

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Beste grafische Einstellungen
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Wie man alles in Myrise freischaltet
    4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

    Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

    Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

    Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

    Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

    Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

    12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

    Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

    Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

    In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

    Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

    In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

    Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

    In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

    See all articles