Heim 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)
    
{
     

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)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate 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)

Das offizielle Einführungs-Tutorial von Huawei für die Programmiersprache Cangjie wird veröffentlicht. Erfahren Sie in einem Artikel, wie Sie die universelle Version des SDK erhalten Das offizielle Einführungs-Tutorial von Huawei für die Programmiersprache Cangjie wird veröffentlicht. Erfahren Sie in einem Artikel, wie Sie die universelle Version des SDK erhalten Jun 25, 2024 am 08:05 AM

Laut Nachrichten dieser Website vom 24. Juni kündigte Gong Ti, Präsident der Softwareabteilung von Huawei Terminal BG, bei der Grundsatzrede der Huawei-Entwicklerkonferenz HDC2024 am 21. Juni offiziell die von Huawei selbst entwickelte Programmiersprache Cangjie an. Diese Sprache wurde fünf Jahre lang entwickelt und steht jetzt als Entwicklervorschau zur Verfügung. Auf der offiziellen Entwickler-Website von Huawei wurde jetzt das offizielle Einführungsvideo zur Programmiersprache Cangjie veröffentlicht, um Entwicklern den Einstieg und das Verständnis zu erleichtern. Dieses Tutorial führt Benutzer dazu, Cangjie zu erleben, Cangjie zu lernen und Cangjie anzuwenden, einschließlich der Verwendung der Cangjie-Sprache zur Schätzung von Pi, der Berechnung der Stamm- und Zweigregeln für jeden Monat des Jahres 2024, der N Möglichkeiten, Binärbäume in der Cangjie-Sprache auszudrücken, und der Verwendung der Aufzählung Typen zur Implementierung algebraischer Berechnungen, Signalsystemsimulation mithilfe von Schnittstellen und Erweiterungen sowie neuer Syntax mithilfe von Cangjie-Makros usw. Diese Site hat die Tutorial-Zugriffsadresse: ht

Nach fünf Jahren Forschung und Entwicklung hat Huaweis Programmiersprache der nächsten Generation „Cangjie' offiziell seine Vorschau veröffentlicht Nach fünf Jahren Forschung und Entwicklung hat Huaweis Programmiersprache der nächsten Generation „Cangjie' offiziell seine Vorschau veröffentlicht Jun 22, 2024 am 09:54 AM

Diese Website berichtete am 21. Juni, dass Gong Ti, Präsident der Softwareabteilung von Huawei Terminal BG, heute Nachmittag auf der Huawei-Entwicklerkonferenz HDC2024 offiziell die von Huawei selbst entwickelte Cangjie-Programmiersprache angekündigt und eine Entwicklervorschauversion der Cangjie-Sprache HarmonyOSNEXT veröffentlicht hat. Dies ist das erste Mal, dass Huawei die Programmiersprache Cangjie öffentlich veröffentlicht. Gong Ti sagte: „Im Jahr 2019 wurde das Cangjie-Programmiersprachenprojekt bei Huawei geboren. Nach fünf Jahren voller Forschung und Entwicklung und hohen Investitionen in Forschung und Entwicklung trifft es heute endlich auf globale Entwickler. Die Cangjie-Programmiersprache integriert moderne Sprachfunktionen, umfassende Kompilierungsoptimierung und Laufzeitimplementierung.“ und die sofort einsatzbereite IDE-Toolkettenunterstützung sorgen für ein benutzerfreundliches Entwicklungserlebnis und eine hervorragende Programmleistung für Entwickler. „Berichten zufolge ist die Programmiersprache Cangjie ein All-Szenario-Intelligence-Tool.

Huawei startet Beta-Rekrutierung für Entwickler der Programmiersprache HarmonyOS NEXT Cangjie Huawei startet Beta-Rekrutierung für Entwickler der Programmiersprache HarmonyOS NEXT Cangjie Jun 22, 2024 am 04:07 AM

Laut Nachrichten dieser Website vom 21. Juni wurde die von Huawei selbst entwickelte Cangjie-Programmiersprache heute offiziell vorgestellt, und der Beamte kündigte den Start der Beta-Rekrutierung für die Vorschauversion der Cangjie-Sprachentwickler von HarmonyOSNEXT an. Bei diesem Upgrade handelt es sich um ein Early-Adopter-Upgrade auf die Entwicklervorschauversion, das das Cangjie-Sprach-SDK, Entwicklerhandbücher und zugehörige DevEcoStudio-Plug-Ins bereitstellt, damit Entwickler die Cangjie-Sprache zum Entwickeln, Debuggen und Ausführen von HarmonyOSNext-Anwendungen verwenden können. Anmeldezeitraum: 21. Juni 2024 – 21. Oktober 2024 Bewerbungsvoraussetzungen: Diese Rekrutierungsveranstaltung für HarmonyOSNEXT Cangjie Language Developer Preview Beta steht nur den folgenden Entwicklern offen: 1) Echte Namen wurden in der Huawei Developer Alliance-Zertifizierung vervollständigt 2) Vervollständigen Sie H

Die Tianjin-Universität und die Beihang-Universität sind maßgeblich am „Cangjie'-Projekt von Huawei beteiligt und haben das erste KI-Agent-Programmier-Framework „Cangqiong' auf Basis inländischer Programmiersprachen auf den Markt gebracht. Die Tianjin-Universität und die Beihang-Universität sind maßgeblich am „Cangjie'-Projekt von Huawei beteiligt und haben das erste KI-Agent-Programmier-Framework „Cangqiong' auf Basis inländischer Programmiersprachen auf den Markt gebracht. Jun 23, 2024 am 08:37 AM

Laut Nachrichten dieser Website vom 22. Juni stellte Huawei gestern Entwicklern auf der ganzen Welt die von Huawei selbst entwickelte Programmiersprache Cangjie vor. Dies ist der erste öffentliche Auftritt der Programmiersprache Cangjie. Laut Anfragen auf dieser Website waren die Tianjin-Universität und die Pekinger Universität für Luft- und Raumfahrt stark an der Forschung und Entwicklung von Huaweis „Cangjie“ beteiligt. Tianjin-Universität: Cangjie-Programmiersprachen-Compiler Das Software-Engineering-Team der Abteilung für Intelligenz und Informatik der Tianjin-Universität hat sich mit dem Huawei Cangjie-Team zusammengetan, um sich intensiv an der Qualitätssicherungsforschung des Cangjie-Programmiersprachen-Compilers zu beteiligen. Berichten zufolge ist der Cangjie-Compiler die Basissoftware, die eine Symbiose mit der Programmiersprache Cangjie eingeht. In der Vorbereitungsphase der Cangjie-Programmiersprache wurde ein hochwertiger Compiler, der dazu passt, zu einem der Kernziele. Während sich die Programmiersprache Cangjie weiterentwickelt, wird der Cangjie-Compiler ständig aktualisiert und verbessert. In den letzten fünf Jahren an der Tianjin-Universität

Huaweis selbst entwickelte offizielle Website und Entwicklungsdokumente für die Programmiersprache Cangjie sind online und integrieren sich erstmals in das Hongmeng-Ökosystem Huaweis selbst entwickelte offizielle Website und Entwicklungsdokumente für die Programmiersprache Cangjie sind online und integrieren sich erstmals in das Hongmeng-Ökosystem Jun 22, 2024 am 03:10 AM

Laut Nachrichten dieser Website wurde am 21. Juni vor der Huawei-Entwicklerkonferenz HDC2024 die von Huawei selbst entwickelte Programmiersprache Cangjie offiziell vorgestellt und die offizielle Website von Cangjie ist jetzt online. Die offizielle Einführung auf der Website zeigt, dass die Programmiersprache Cangjie eine Programmiersprache der neuen Generation für All-Szenario-Intelligenz ist, die sich auf „native Intelligenz, natürliche All-Szenarien, hohe Leistung und starke Sicherheit“ konzentriert. Integrieren Sie sich in das Hongmeng-Ökosystem, um Entwicklern ein gutes Programmiererlebnis zu bieten. Die dieser Website beigefügte offizielle Website stellt Folgendes vor: Natives intelligentes Programmier-Framework, eingebettet in AgentDSL, organische Integration natürlicher Sprache und Multi-Agent-Zusammenarbeit, vereinfachter symbolischer Ausdruck, freie Kombination von Mustern, Unterstützung der Entwicklung verschiedener intelligenter Anwendungen; Von Natur aus leichte und skalierbare Laufzeit für alle Szenen, modulares Schichtdesign, egal wie klein der Speicher ist, es kann eine Domänenerweiterung für alle Szenarien berücksichtigt werden

Vergleich der Vor- und Nachteile der C++-Technologie und anderer moderner Programmiersprachen Vergleich der Vor- und Nachteile der C++-Technologie und anderer moderner Programmiersprachen Jun 01, 2024 pm 10:15 PM

Ein Vergleich der Vor- und Nachteile von C++ mit anderen modernen Programmiersprachen lautet: Vorteile von C++: hohe Leistung, Steuerung auf niedriger Ebene, reichhaltiges Bibliotheksökosystem. Nachteile von C++: Steile Lernkurve, manuelle Speicherverwaltung, eingeschränkte Portabilität. Vorteile von Python: reibungslose Lernkurve, umfangreiche Bibliotheksunterstützung, interpretierte Sprache. Vorteile von Java: Plattformunabhängig, automatische Speicherverwaltung, breite Anwendung. Vorteile von JavaScript: wesentlich für die Front-End-Entwicklung, leichtgewichtiger, dynamischer Typ.

Tsinghua University und Zhipu AI Open Source GLM-4: Start einer neuen Revolution in der Verarbeitung natürlicher Sprache Tsinghua University und Zhipu AI Open Source GLM-4: Start einer neuen Revolution in der Verarbeitung natürlicher Sprache Jun 12, 2024 pm 08:38 PM

Seit der Einführung von ChatGLM-6B am 14. März 2023 haben die Modelle der GLM-Serie große Aufmerksamkeit und Anerkennung erhalten. Insbesondere nachdem ChatGLM3-6B als Open Source verfügbar war, sind die Entwickler voller Erwartungen an das von Zhipu AI eingeführte Modell der vierten Generation. Diese Erwartung wurde mit der Veröffentlichung von GLM-4-9B endlich vollständig erfüllt. Die Geburt von GLM-4-9B Um kleinen Modellen (10B und darunter) leistungsfähigere Fähigkeiten zu verleihen, hat das GLM-Technikteam nach fast einem halben Jahr dieses neue Open-Source-Modell der GLM-Serie der vierten Generation auf den Markt gebracht: GLM-4-9B Erkundung. Dieses Modell komprimiert die Modellgröße erheblich und stellt gleichzeitig Genauigkeit sicher. Es verfügt über eine schnellere Inferenzgeschwindigkeit und eine höhere Effizienz. Die Untersuchungen des GLM-Technikteams haben dies nicht getan

Das letzte Glied des reinblütigen Hongmeng-Ökosystems von Huawei! Die selbst entwickelte Programmiersprache Cangjie wird ihr Debüt geben Das letzte Glied des reinblütigen Hongmeng-Ökosystems von Huawei! Die selbst entwickelte Programmiersprache Cangjie wird ihr Debüt geben Jun 21, 2024 pm 03:23 PM

Laut Nachrichten vom 21. Juni wird heute Nachmittag die Huawei Developer Conference 2024 offiziell eröffnet. „Reinblütiges Hongmeng“ Harmony OS NEXT hat natürlich höchste Priorität. Nach dem zuvor von Yu Chengdong bekannt gegebenen Plan könnte die öffentliche Beta heute Nachmittag offiziell angekündigt werden, und normale Verbraucher können auch „reinblütiges Harmony“ ausprobieren. Berichten zufolge sind die ersten unterstützten Mobiltelefone die Serien Mate60 und Pura70. Es ist erwähnenswert, dass HarmonyOSNEXT als „reinblütiges Hongmeng“ den traditionellen Linux-Kernel und den AOSP-Android-Open-Source-Code entfernt und den gesamten Stack im eigenen Haus entwickelt hat. Laut dem neuesten Bericht von Sina Technology wird Huawei auch die letzte Verbindung des Hongmeng-Ökosystems fertigstellen und seine Präsenz in der Welt ausbauen.

See all articles