基於Visual c++ 2012的php擴展開發 - HelloWord!

一、cmd進入命令行模式,並進入php-5.6.20-src/ext源代碼的ext目錄下
輸入命令php ext_skel_win32.php --extname=HelloWord,執行結果以下圖:php

執行後在ext目錄下多了HelloWord文件夾服務器

文件夾中的HelloWord.dsp是Viscual C++的工程文件函數

從php的安裝目錄中的dev文件夾下,找到php5ts.lib,複製到建立的HelloWord擴展目錄下測試

用Vs2012打開HelloWord.dsp工程文件,調試模式選擇Release模式,ui

F5啓動調試,發生錯誤,提示以下:
c:\php-5.6.20-src\zend\zend_config.w32.h(25): fatal error C1083: 沒法打開包括文件:「../main/config.w32.h」: No such file or directoryspa

說明main/config.w32.h文件缺失,網上搜索了諸多辦法,均失效,或許是之前的版本有效,如今這裏提供正確的解決辦法:命令行

添加config.w32.h文件
在php源代碼文件目錄裏搜索config.w32.h,在C:\php-5.6.20-src\win32\build文件夾裏找到config.w32.h.in,將這個文件複製到C:\php-5.6.20-src\main文件夾裏,去掉後面的.in
注意:爲了讓擴展能和php運行環境嚴格匹配,要根據你的php運行環境的編譯版本(php5.6.20是VC11編譯的),在config.w32.h文件里加上:
#define PHP_COMPILER_ID "VC11"3d

此時再從新編譯,編譯成功,在php-5.6.20-src目錄下生成了Release_TS目錄,裏面有生成的擴展文件php_HelloWord.dll調試

此時咱們將php_HelloWord.dll拷貝到C:/php/ext目錄下,並設置php.ini文件增長extension=php_HelloWord.dll,並重啓Apache服務器
此時咱們用phpinfo()函數測試,發現已經成功安裝了php_HelloWord.dll擴展code

打開HelloWord.c文件
找到以下函數:

PHP_FUNCTION(confirm_HelloWord_compiled)
{

    char *arg = NULL;
    int arg_len, len;
    char *strg;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
        return;
    }

    len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "HelloWord", arg);
    RETURN_STRINGL(strg, len, 0);
}

在下面增長函數HelloPHP

PHP_FUNCTION(HelloPHP)
{
        RETURN_STRING("Hello PHP Ext!", 1);
}

找到以下代碼:

const zend_function_entry HelloWord_functions[] = {
    PHP_FE(confirm_HelloWord_compiled,  NULL)       /* For testing, remove later. */
    PHP_FE_END  /* Must be the last line in HelloWord_functions[] */
};

並修改以下:

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

從新編譯,生成php_HelloWord.dll

此時將php_HelloWord.dll複製到php/ext目錄下,咱們編寫測試php代碼以下:

<?php
echo HelloPHP();
?>

能夠看到執行結果:

自此第一個簡單的擴展開發完成!

相關文章
相關標籤/搜索