首頁 後端開發 PHP7 如何用VS2015(vs14)開發PHP7擴展

如何用VS2015(vs14)開發PHP7擴展

Jun 22, 2021 am 09:18 AM

這篇文章跟大家介紹一下用VS2015(vs14)開發PHP7擴充的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

如何用VS2015(vs14)開發PHP7擴展

開發前準備工作:

VS(我用的2013)

Cygwin(下載地址:http://www. cygwin.com/)

搭載了php運行環境的IIS7.5 (用來測試)

php編譯後的程式和編譯前的源碼,我用的當前最新版本7.0. 5(下載網址:http://windows.php.net/download#php-7.0)

#編譯後的程式路徑:E:\vs_c \test\phpext\php-7.0.5-src

編譯前的原始碼路徑:E:\vs_c \test\phpext\php-7.0.5-nts-Win32-VC14-x86\

步驟:

1.安裝Cygwin

如何用VS2015(vs14)開發PHP7擴展

從網路安裝

如何用VS2015(vs14)開發PHP7擴展

預設安裝C碟

如何用VS2015(vs14)開發PHP7擴展

下載快取隨意,安裝結束記得刪掉,我是放在桌面的

如何用VS2015(vs14)開發PHP7擴展

如何用VS2015(vs14)開發PHP7擴展

#在中國,就選http ://mirrors.163.com,後面一直下一步到結束。

2.找到php原始碼目錄我的是(E:\vs_c \test\phpext\php-7.0.5-src,以下用這個代表原始碼目錄),開啟E:\vs_c \test\phpext \php-7.0.5-src\ext\ext_skel_win32.php

如何用VS2015(vs14)開發PHP7擴展

#這裡改成你的cygwin安裝目錄,我的就是C盤,所以不用改。

3.執行cmd,進入E:\vs_c \test\phpext\php-7.0.5-src\ext\裡,執行php.exe  ext_skel_win32.php --extname=test,這裡test代表你的php副檔名。

如何用VS2015(vs14)開發PHP7擴展

開啟E:\vs_c \test\phpext\php-7.0.5-src\ext就會看到一個test資料夾,這個就是你的擴充。

 4.開啟VS選擇「檔案」--「新建」--「從現有程式碼建立目錄」

如何用VS2015(vs14)開發PHP7擴展

選擇C

如何用VS2015(vs14)開發PHP7擴展

這裡選擇你的php擴充資料夾路徑,並且為專案命名

如何用VS2015(vs14)開發PHP7擴展

選擇“使用visual studio”,專案類型選擇“動態連結程式庫(DLL)專案”,後面一直預設下一步一直到完成。

如何用VS2015(vs14)開發PHP7擴展

5.剛開始開啟會有很多錯誤,我們接下來開始設定專案。

如何用VS2015(vs14)開發PHP7擴展

先把專案解決方案配置改為Release

如何用VS2015(vs14)開發PHP7擴展

#右鍵專案屬性,C/C ,常規,附加包含目錄,編輯

如何用VS2015(vs14)開發PHP7擴展

加入以下幾個php原始碼目錄(實際目錄以開發者自己的目錄為準):

E:\vs_c \ test\phpext\php-7.0.5-src

E:\vs_c \test\phpext\php-7.0.5-src\main

E:\vs_c \test\phpext\ php-7.0.5-src\TSRM

E:\vs_c \test\phpext\php-7.0.5-src\Zend

右鍵專案屬性,C/C ,預處理器,預處理器定義,編輯,加入以下變數:

ZEND_DEBUG=0

#PHP_EXTENSION

PHP_WIN32

#ZEND_WIN32

HAVE_TEST=1(這裡紅色部分,要改成你的擴充名稱,不改成你的副檔名,php會不識別)

COMPILE_DL_TEST(這裡紅色部分,要改成你的擴充名稱,不改成你的副檔名,php會不識別)

ZTS(這一個變數加上是開啟線程安全,不加是關閉線程安全這個根據你編譯的php是不是線程安全來判斷是否加入此變數ps:我就在這上面吃虧了沒對應上導致php不識別擴充)

如何用VS2015(vs14)開發PHP7擴展

產生解決方案,錯誤訊息顯示找不到“config.w32.h”,在原始碼檔案目錄中搜尋“config.w32. h”,在E:\vs_c \test\phpext\php-7.0.5-src\win32\build\資料夾裡找到“config.w32.h.in”,將這個檔案複製到E:\vs_c \test \phpext\php-7.0.5-src\main\資料夾裡,去掉後面的「.in」

再產生解決方案,顯示錯誤訊息LNK1120

錯誤7 error LNK1120: 5 個無法解析的外部指令E:\vs_c \test\phpext\php-7.0.5-src\ext\test\Release\phptest.dll 1 1 phptest

#右鍵專案屬性,連接器,輸入,附加依賴項,編輯,將php5.lib的路徑放進去(這個檔案在php編譯後的程式資料夾裡,根目錄的dev資料夾裡)

注意:為了讓擴充能和php執行環境匹配,要根據你的php運行環境的編譯版本(php7.0.5是VC14編譯的),在E:\vs_c \test\phpext\php-7.0.5-src\main\資料夾裡的config. w32.h檔案加上:

#define PHP_COMPILER_ID "VC14"
登入後複製

開啟E:\vs_c \test\phpext\php-7.0.5-src\ext\test\test.c

#找到這一段程式碼:

PHP_FUNCTION(confirm_test_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.", "test", arg);
    RETURN_STRINGL(strg, len, 0);
}
登入後複製

將confirm_test_compiled改成test_echo

再找到這一段程式碼:

const zend_function_entry test_functions[] = {
    PHP_FE(confirm_test_compiled,    NULL)        /* For testing, remove later. */
    PHP_FE_END    /* Must be the last line in test_functions[] */
};
登入後複製

將裡面的confirm_test_compiled也改成test_echo

如何用VS2015(vs14)開發PHP7擴展

###########################################################################################################################################生成解決方案,在專案根目錄的Release資料夾裡找到自己的php擴充phptest.dll,複製到php的ext資料夾裡,在php.ini裡配置上:######extension=phptest.dll ######重啟IIS,新建一個站點,在裡面新建一個test.php檔案###
<?php 
echo test_echo("123");
登入後複製
###運行得到結果:###############這個test_echo函數,就是我們自己的自訂函數了,你也可以依照需求,開發自己的擴充來提升php的效能。 ######推薦學習:###php影片教學######

以上是如何用VS2015(vs14)開發PHP7擴展的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)