Maison php教程 php手册 用PHP扩展做一个HelloWorld!

用PHP扩展做一个HelloWorld!

Jul 11, 2016 pm 08:00 PM
php扩展 代码 开源 编程 编程语言 软件开发

PHP 尽管提供了大量有用的函数,但是在特殊情况下还可能需要进行扩展编程,比如大量的 PECL(PHP Extension Community Library)就是以扩展的形式提供的(动态链接库dll文件),它们比 PEAR 的运行效率要高很多。
    PHP 扩展是用 C 或 C++ 编写的,需要编译成动态连接库 dll 文件后在 PHP 环境下注册后才能使用。
    编写 PHP 扩展的软件要求:
      VC++6.0 或 VC++.NET 环境。
      PHP 的源代码,需要编译。
    如果不愿意编译 PHP 的源代码,可以再下载 PHP 的已经编译成功的二进制代码(就是我们部署 PHP 运行环境的那些文件包)。注意分别下载的源文件包和已编译包,它们的版本必须一致。

    过程:

    1,安装 VC++6.0,并选择把其可执行文件路径加入环境变量中,使在命令行环境任意路径下可以运行编译器。
    2,安装 PHP 运行环境,并与 IIS 正确集成在一起。假设使用的 PHP 版本为 5.2.5,下载 php-5.2.5-Win32.zip 二进制包和 php-5.2.5.tar.gz 源代码包。安装环境为 C:\php-5.2.5-Win32。分别把源代码包和二进制包解压到该文件夹下。从 php.ini-recommended 拷贝生成一个 php.ini 文件。
    3,建立 C:\php-5.2.5-Win32\Release_TS 文件夹,拷贝 C:\php-5.2.5-Win32\dev\php5ts.lib 文件到这里。
    4,进入 C:\php-5.2.5-Win32\ext 文件夹,运行命令:
      C:\php-5.2.5-Win32\ext>..\php.exe ext_skel_win32.php --extname=myphpext
      Creating directory myphpext
      Creating basic files: config.m4 config.w32 .cvsignore myphpext.c php_myphpext.h
      CREDITS EXPERIMENTAL tests/001.phpt myphpext.php [done].

      To use your new extension, you will have to execute the following steps:

      1.  $ cd ..
      2.  $ vi ext/myphpext/config.m4
      3.  $ ./buildconf
      4.  $ ./configure --[with|enable]-myphpext
      5.  $ make
      6.  $ ./php -f ext/myphpext/myphpext.php
      7.  $ vi ext/myphpext/myphpext.c
      8.  $ make

      Repeat steps 3-6 until you are satisfied with ext/myphpext/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 下生成一个文件夹 myphpext,包含一个 PHP 扩展应用编程框架。myphpext 可以任意取名,将来生成的 dll 文件格式为 php_[extname].dll,我们生成的就是 php_myphpext.dll。运行结果的提示信息 1.2...8 主要是对 Linux/Unix 环境而言的,我们不必理会。其实 config.m4 文件在 Windows 下也可能需要修改,但是对于我们简单的框架暂时还用不着。

    文件夹 myphpext 包含若干个文件,其中:

    myphpext.dsp 是工程文件,后边还要用;
    myphpext.php 扩展测试文件;
    php_myphpext.h 扩展函数定义头文件
    myphpext.c 扩展函数具体实现

    以上 2 个重要的文件内容:

    php_myphpext.h 文件:

/*
      +----------------------------------------------------------------------+
      | PHP Version 5                                                        |
      +----------------------------------------------------------------------+
      | Copyright (c) 1997-2007 The PHP Group                                |
      +----------------------------------------------------------------------+
      | This source file is subject to version 3.01 of the PHP license,      |
      | that is bundled with this package in the file LICENSE, and is        |
      | available through the world-wide-web at the following url:           |
      | 
http://www.php.net/license/3_01.txt                                  |
      | If you did not receive a copy of the PHP license and are unable to   |
      | obtain it through the world-wide-web, please send a note to          |
      | license@php.net so we can mail you a copy immediately.               |
      +----------------------------------------------------------------------+
      | Author:                                                              |
      +----------------------------------------------------------------------+
    
*/


    
/* $Id: header,v 1.16.2.1.2.1 2007/01/01 19:32:09 iliaa Exp $ */

    #ifndef PHP_MYPHPEXT_H
    
#define PHP_MYPHPEXT_H

    
extern zend_module_entry myphpext_module_entry;
    
#define phpext_myphpext_ptr &myphpext_module_entry

    #ifdef PHP_WIN32
    
#define PHP_MYPHPEXT_API __declspec(dllexport)
    
#else
    
#define PHP_MYPHPEXT_API
    
#endif

    #ifdef ZTS
    #include 
"TSRM.h"
    
#endif

    PHP_MINIT_FUNCTION(myphpext);
    PHP_MSHUTDOWN_FUNCTION(myphpext);
    PHP_RINIT_FUNCTION(myphpext);
    PHP_RSHUTDOWN_FUNCTION(myphpext);
    PHP_MINFO_FUNCTION(myphpext);

    PHP_FUNCTION(confirm_myphpext_compiled); 
/* For testing, remove later. */
    PHP_FUNCTION(HelloPHP);

    
/*
       Declare any global variables you may need between the BEGIN
     and END macros here:

    ZEND_BEGIN_MODULE_GLOBALS(myphpext)
     long  global_value;
     char *global_string;
    ZEND_END_MODULE_GLOBALS(myphpext)
    
*/


    
/* In every utility function you add that needs to use variables
       in php_myphpext_globals, call TSRMLS_FETCH(); after declaring other
       variables used by that function, or better yet, pass in TSRMLS_CC
       after the last function argument and declare your utility function
       with TSRMLS_DC after the last declared argument.  Always refer to
       the globals in your function as MYPHPEXT_G(variable).  You are
       encouraged to rename these macros something shorter, see
       examples in any other php module directory.
    
*/


    #ifdef ZTS
    
#define MYPHPEXT_G(v) TSRMG(myphpext_globals_id, zend_myphpext_globals *, v)
    
#else
    
#define MYPHPEXT_G(v) (myphpext_globals.v)
    
#endif

    
#endif /* PHP_MYPHPEXT_H */

    
/*
     * Local variables:
     * tab-width: 4
     * c-basic-offset: 4
     * End:
     * vim600: noet sw=4 ts=4 fdm=marker
     * vim      
*/


  

  myphpext.c 文件:

    

/*
      +----------------------------------------------------------------------+
      | PHP Version 5                                                        |
      +----------------------------------------------------------------------+
      | Copyright (c) 1997-2007 The PHP Group                                |
      +----------------------------------------------------------------------+
      | This source file is subject to version 3.01 of the PHP license,      |
      | that is bundled with this package in the file LICENSE, and is        |
      | available through the world-wide-web at the following url:           |
      | 
http://www.php.net/license/3_01.txt                                  |
      | If you did not receive a copy of the PHP license and are unable to   |
      | obtain it through the world-wide-web, please send a note to          |
      | license@php.net so we can mail you a copy immediately.               |
      +----------------------------------------------------------------------+
      | Author:                                                              |
      +----------------------------------------------------------------------+
    
*/


    
/* $Id: header,v 1.16.2.1.2.1 2007/01/01 19:32:09 iliaa Exp $ */

    #ifdef HAVE_CONFIG_H
    #include 
"config.h"
    
#endif

    #include 
"php.h"
    #include 
"php_ini.h"
    #include 
"ext/standard/info.h"
    #include 
"php_myphpext.h"

    
/* If you declare any globals in php_myphpext.h uncomment this:
    ZEND_DECLARE_MODULE_GLOBALS(myphpext)
    
*/


    
/* True global resources - no need for thread safety here */
    
static int le_myphpext;

    
/* {{{ myphpext_functions[]
     *
     * Every user visible function must have an entry in myphpext_functions[].
     
*/

    zend_function_entry myphpext_functions[] 
= {
     PHP_FE(confirm_myphpext_compiled, NULL)  
/* For testing, remove later. */
     PHP_FE(HelloPHP, NULL)
     
{NULL, NULL, NULL} /* Must be the last line in myphpext_functions[] */
    }
;
    
/* }}} */

    
/* {{{ myphpext_module_entry
     
*/

    zend_module_entry myphpext_module_entry 
= {
    
#if ZEND_MODULE_API_NO >= 20010901
     STANDARD_MODULE_HEADER,
    
#endif
     
"myphpext",
     myphpext_functions,
     PHP_MINIT(myphpext),
     PHP_MSHUTDOWN(myphpext),
     PHP_RINIT(myphpext),  
/* Replace with NULL if there's nothing to do at request start */
     PHP_RSHUTDOWN(myphpext), 
/* Replace with NULL if there's nothing to do at request end */
     PHP_MINFO(myphpext),
    
#if ZEND_MODULE_API_NO >= 20010901
     
"0.1"/* Replace with version number for your extension */
    
#endif
     STANDARD_MODULE_PROPERTIES
    }
;
    
/* }}} */

    #ifdef COMPILE_DL_MYPHPEXT
    ZEND_GET_MODULE(myphpext)
    
#endif

    
/* {{{ PHP_INI
     
*/

    
/* Remove comments and fill if you need to have entries in php.ini
    PHP_INI_BEGIN()
        STD_PHP_INI_ENTRY("myphpext.global_value",      "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_myphpext_globals, myphpext_globals)
        STD_PHP_INI_ENTRY("myphpext.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_myphpext_globals, myphpext_globals)
    PHP_INI_END()
    
*/

    
/* }}} */

    
/* {{{ php_myphpext_init_globals
     
*/

    
/* Uncomment this function if you have INI entries
    static void php_myphpext_init_globals(zend_myphpext_globals *myphpext_globals)
    {
     myphpext_globals->global_value = 0;
     myphpext_globals->global_string = NULL;
    }
    
*/

    
/* }}} */

    
/* {{{ PHP_MINIT_FUNCTION
     
*/

    PHP_MINIT_FUNCTION(myphpext)
    
{
     
/* If you have INI entries, uncomment these lines
     REGISTER_INI_ENTRIES();
     
*/

     
return SUCCESS;
    }

    
/* }}} */

    
/* {{{ PHP_MSHUTDOWN_FUNCTION
     
*/

    PHP_MSHUTDOWN_FUNCTION(myphpext)
    
{
     

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Le didacticiel d'introduction officiel de Huawei au langage de programmation Cangjie est publié. Découvrez comment obtenir la version universelle du SDK dans un seul article. Le didacticiel d'introduction officiel de Huawei au langage de programmation Cangjie est publié. Découvrez comment obtenir la version universelle du SDK dans un seul article. Jun 25, 2024 am 08:05 AM

Selon les informations de ce site du 24 juin, lors du discours d'ouverture de la conférence des développeurs Huawei HDC2024 le 21 juin, Gong Ti, président du département logiciel Huawei Terminal BG, a officiellement annoncé le langage de programmation Cangjie auto-développé par Huawei. Ce langage a été développé depuis 5 ans et est désormais disponible en avant-première pour les développeurs. Le site Web officiel des développeurs de Huawei a maintenant lancé la vidéo officielle du didacticiel d'introduction du langage de programmation Cangjie pour permettre aux développeurs de démarrer et de le comprendre. Ce didacticiel amènera les utilisateurs à découvrir Cangjie, à apprendre Cangjie et à appliquer Cangjie, notamment en utilisant le langage Cangjie pour estimer pi, calculer les règles de tige et de branche pour chaque mois de 2024, voir N façons d'exprimer les arbres binaires en langage Cangjie et utiliser l'énumération. types pour implémenter des calculs algébriques, la simulation du système de signaux à l'aide d'interfaces et d'extensions, et une nouvelle syntaxe à l'aide des macros Cangjie, etc. Ce site a une adresse d'accès au tutoriel : ht

Après 5 ans de recherche et développement, le langage de programmation de nouvelle génération de Huawei « Cangjie » a officiellement lancé sa version préliminaire Après 5 ans de recherche et développement, le langage de programmation de nouvelle génération de Huawei « Cangjie » a officiellement lancé sa version préliminaire Jun 22, 2024 am 09:54 AM

Ce site a rapporté le 21 juin que lors de la conférence des développeurs Huawei HDC2024 cet après-midi, Gong Ti, président du département logiciel Huawei Terminal BG, a officiellement annoncé le langage de programmation Cangjie auto-développé par Huawei et a publié une version préliminaire pour les développeurs du langage HarmonyOSNEXT Cangjie. C'est la première fois que Huawei publie publiquement le langage de programmation Cangjie. Gong Ti a déclaré : « En 2019, le projet de langage de programmation Cangjie est né chez Huawei. Après 5 ans d'accumulation de R&D et d'investissements importants en R&D, il rencontre enfin les développeurs mondiaux aujourd'hui. Le langage de programmation Cangjie intègre des fonctionnalités de langage moderne, une optimisation complète de la compilation et une implémentation du Runtime. et la prise en charge prête à l'emploi de la chaîne d'outils IDE créent une expérience de développement conviviale et d'excellentes performances de programme pour les développeurs. « Selon les rapports, le langage de programmation Cangjie est un outil d'intelligence tous scénarios.

Huawei lance le recrutement bêta d'un aperçu du langage de programmation HarmonyOS NEXT Cangjie Huawei lance le recrutement bêta d'un aperçu du langage de programmation HarmonyOS NEXT Cangjie Jun 22, 2024 am 04:07 AM

Selon les informations de ce site du 21 juin, le langage de programmation Cangjie développé par Huawei a été officiellement dévoilé aujourd'hui, et le responsable a annoncé le lancement de la version bêta du recrutement HarmonyOSNEXT Cangjie pour les développeurs de langage. Cette mise à niveau est une mise à niveau précoce vers la version préliminaire du développeur, qui fournit le SDK du langage Cangjie, les guides du développeur et les plug-ins DevEcoStudio associés permettant aux développeurs d'utiliser le langage Cangjie pour développer, déboguer et exécuter des applications HarmonyOSNext. Période d'inscription : du 21 juin 2024 au 21 octobre 2024 Conditions de candidature : Cet événement de recrutement HarmonyOSNEXT Cangjie Language Developer Preview Beta est ouvert uniquement aux développeurs suivants : 1) Les vrais noms ont été renseignés dans la certification Huawei Developer Alliance 2) Complete H ;

L'Université de Tianjin et l'Université de Beihang sont profondément impliquées dans le projet « Cangjie » de Huawei et ont lancé le premier cadre de programmation d'agents d'IA « Cangqiong » basé sur des langages de programmation nationaux. L'Université de Tianjin et l'Université de Beihang sont profondément impliquées dans le projet « Cangjie » de Huawei et ont lancé le premier cadre de programmation d'agents d'IA « Cangqiong » basé sur des langages de programmation nationaux. Jun 23, 2024 am 08:37 AM

Selon les informations de ce site du 22 juin, Huawei a présenté hier le langage de programmation auto-développé par Huawei, Cangjie, aux développeurs du monde entier. Il s'agit de la première apparition publique du langage de programmation Cangjie. Selon des enquêtes sur ce site, l'Université de Tianjin et l'Université d'aéronautique et d'astronautique de Pékin ont été profondément impliquées dans la recherche et le développement du « Cangjie » de Huawei. Université de Tianjin : compilateur de langage de programmation Cangjie L'équipe d'ingénierie logicielle du département d'intelligence et d'informatique de l'université de Tianjin s'est associée à l'équipe de Huawei Cangjie pour participer en profondeur à la recherche sur l'assurance qualité du compilateur de langage de programmation Cangjie. Selon certaines informations, le compilateur Cangjie est le logiciel de base en symbiose avec le langage de programmation Cangjie. Lors de la phase préparatoire du langage de programmation Cangjie, un compilateur de haute qualité qui lui correspond est devenu l'un des objectifs principaux. À mesure que le langage de programmation Cangjie évolue, le compilateur Cangjie est constamment mis à niveau et amélioré. Au cours des cinq dernières années, l'Université de Tianjin

Le site Web officiel et les documents de développement du langage de programmation Cangjie développé par Huawei sont en ligne et s'intègrent pour la première fois à l'écosystème Hongmeng. Le site Web officiel et les documents de développement du langage de programmation Cangjie développé par Huawei sont en ligne et s'intègrent pour la première fois à l'écosystème Hongmeng. Jun 22, 2024 am 03:10 AM

Selon les informations de ce site du 21 juin, avant la conférence des développeurs Huawei HDC2024, le langage de programmation Cangjie développé par Huawei a été officiellement dévoilé et le site officiel de Cangjie est désormais en ligne. L'introduction du site officiel montre que le langage de programmation Cangjie est un langage de programmation de nouvelle génération pour l'intelligence tous scénarios, axé sur « l'intelligence native, tous les scénarios naturels, les hautes performances et une sécurité renforcée ». Intégrez-vous à l'écosystème Hongmeng pour offrir aux développeurs une bonne expérience de programmation. Le site officiel joint à ce site présente ce qui suit : cadre de programmation intelligent natif intégré à AgentDSL, intégration organique du langage naturel et du langage de programmation, expression symbolique simplifiée, combinaison libre de modèles, prenant en charge le développement de diverses applications intelligentes. Exécution naturellement légère et évolutive pour toutes les scènes, conception modulaire en couches, quelle que soit la taille de la mémoire, elle peut être adaptée à l'extension de domaine pour tous les scénarios ;

Le dernier maillon de l'écosystème Hongmeng de sang pur de Huawei ! Le langage de programmation Cangjie auto-développé fera ses débuts Le dernier maillon de l'écosystème Hongmeng de sang pur de Huawei ! Le langage de programmation Cangjie auto-développé fera ses débuts Jun 21, 2024 pm 03:23 PM

Selon les informations du 21 juin, cet après-midi, la Huawei Developer Conference 2024 sera officiellement ouverte. "Pure-blood Hongmeng" HarmonyOS NEXT est naturellement une priorité absolue. Selon le plan précédemment divulgué par Yu Chengdong, la version bêta publique pourrait être officiellement annoncée cet après-midi, et les consommateurs ordinaires peuvent également essayer "pur-blood Harmony". Selon certaines informations, les premiers téléphones mobiles pris en charge sont les séries Mate60 et Pura70. Il convient de noter qu'en tant que « Hongmeng de sang pur », HarmonyOSNEXT a supprimé le noyau Linux traditionnel et le code open source AOSP Android et a développé l'intégralité de la pile en interne. Selon le dernier rapport de Sina Technology, Huawei achèvera également le dernier maillon de l'écosystème Hongmeng et étendra sa présence dans le monde.

L'Université Tsinghua et Zhipu AI open source GLM-4 : lancent une nouvelle révolution dans le traitement du langage naturel L'Université Tsinghua et Zhipu AI open source GLM-4 : lancent une nouvelle révolution dans le traitement du langage naturel Jun 12, 2024 pm 08:38 PM

Depuis le lancement du ChatGLM-6B le 14 mars 2023, les modèles de la série GLM ont reçu une large attention et une grande reconnaissance. Surtout après que ChatGLM3-6B soit open source, les développeurs sont pleins d'attentes pour le modèle de quatrième génération lancé par Zhipu AI. Cette attente a finalement été pleinement satisfaite avec la sortie du GLM-4-9B. La naissance du GLM-4-9B Afin de donner aux petits modèles (10B et moins) des capacités plus puissantes, l'équipe technique de GLM a lancé ce nouveau modèle open source de la série GLM de quatrième génération : GLM-4-9B après près de six mois de exploration. Ce modèle compresse considérablement la taille du modèle tout en garantissant la précision, et offre une vitesse d'inférence plus rapide et une efficacité plus élevée. L’exploration de l’équipe technique du GLM n’a pas

Le modèle de code open source Mistral monte sur le trône ! Codestral est fou de formation dans plus de 80 langues, et les développeurs nationaux de Tongyi demandent à participer ! Le modèle de code open source Mistral monte sur le trône ! Codestral est fou de formation dans plus de 80 langues, et les développeurs nationaux de Tongyi demandent à participer ! Jun 08, 2024 pm 09:55 PM

Produit par 51CTO Technology Stack (WeChat ID : blog51cto) Mistral a publié son premier modèle de code Codestral-22B ! Ce qui est fou avec ce modèle, ce n'est pas seulement qu'il est formé sur plus de 80 langages de programmation, dont Swift, etc., que de nombreux modèles de code ignorent. Leurs vitesses ne sont pas exactement les mêmes. Il est nécessaire d'écrire un système de « publication/abonnement » en langage Go. Le GPT-4o ici est en cours de sortie, et Codestral remet le papier si vite qu'il est difficile de le voir ! Le modèle venant tout juste d’être lancé, il n’a pas encore été testé publiquement. Mais selon le responsable de Mistral, Codestral est actuellement le modèle de code open source le plus performant. Les amis intéressés par la photo peuvent se déplacer vers : - Faire un câlin : https

See all articles