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

這篇文章跟大家介紹一下用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中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
如何從PHP 5.6升級到PHP 7?如何從PHP 5.6升級到PHP 7?Mar 10, 2025 pm 06:29 PM

本文詳細介紹了將PHP 5.6升級為PHP 7的升級,並強調了關鍵步驟,例如備份,檢查服務器兼容性以及選擇升級方法(軟件包管理器,編譯,控制面板或Web服務器配置)。 它解決了Potentia

如何使用New Relic等工具監視PHP 7的性能?如何使用New Relic等工具監視PHP 7的性能?Mar 10, 2025 pm 06:28 PM

本文解釋瞭如何使用新遺物監視PHP 7應用程序性能。 它詳細詳細介紹了新的Relic的設置,關鍵績效指標(KPI),例如APDEX分數和響應時間,通過交易軌蹟的瓶頸標識和錯誤軌跡

如何將PHP 7應用程序部署到Web服務器?如何將PHP 7應用程序部署到Web服務器?Mar 10, 2025 pm 06:28 PM

本文詳細介紹了部署PHP 7應用程序,涵蓋方法(FTP,SSH,部署工具),服務器配置(Apache/nginx,php-fpm),數據庫設置和重要的安全考慮因素。 它突出了服務器compatib等常見挑戰

如何在PHP 7項目中使用GIT進行版本控制?如何在PHP 7項目中使用GIT進行版本控制?Mar 10, 2025 pm 06:27 PM

本文指導PHP 7開發人員使用GIT進行版本控制。 它涵蓋了初始化,分期,投入,忽略文件,遠程存儲庫,分支,合併,解決衝突和基本的GIT命令。 效率的最佳實踐

如何使用PHP 7使用Docker?如何使用PHP 7使用Docker?Mar 10, 2025 pm 06:26 PM

本文解釋了使用具有PHP 7的Docker,涵蓋了Dockerfile的創建,圖像構建和容器運行時。 它詳細介紹了安全性最佳實踐(非根本用戶,依賴關係更新,輸入驗證),使用Docker Comp的多服務管理

如何使用Xdebug進行調試PHP 7代碼?如何使用Xdebug進行調試PHP 7代碼?Mar 10, 2025 pm 06:26 PM

本文說明瞭如何使用Xdebug進行調試PHP 7代碼。 它涵蓋Xdebug配置(安裝,php.ini設置,IDE設置),斷點用法(條件,功能,遠程)和故障排除連接問題。 有效的Debuggi

如何使用PHPUNIT測試PHP 7代碼?如何使用PHPUNIT測試PHP 7代碼?Mar 10, 2025 pm 06:25 PM

本文指導PHP開發人員使用PHPUNIT測試PHP 7代碼。 它突出了從先前的PHP版本的無縫過渡,強調利用PHP 7的功能(類型提示,返回類型)以改善測試魯棒性。 文章

如何使用PHP 7使用CodeIgniter框架?如何使用PHP 7使用CodeIgniter框架?Mar 10, 2025 pm 06:24 PM

本文指導使用PHP 7的Codeigniter指導該框架的兼容性,PHP 7的發動機增強功能以​​及至關重要的安全性最佳實踐。 它涵蓋了設置,配置和利用PHP 7 Featu

See all articles

熱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尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。