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.

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Alipay Php ...

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Comment déboguer le mode CLI dans phpstorm? Lors du développement avec PHPStorm, nous devons parfois déboguer PHP en mode interface de ligne de commande (CLI) ...

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...
