windows下用c c 開發php擴充套件

2021-06-28 21:40:58 字數 3219 閱讀 7168

cygwin ,它是乙個在windows平台上執行的類unix模擬環境

php原始碼(壓縮包)

php二進位制檔案,也就是安裝在windows上的php

vs2008 或者更高(vs2010,vs2013)

win32build.rar和bindlib_win32.rar(主要用來生成config.win32.h)

1: 解壓php原始碼,裡面有乙個ext目錄,這裡便是負責開發php擴充套件的目錄,目錄中有預設的所有擴充套件原始碼,還有兩個檔案,

ext_skel_win32.php 和 ext_skel檔案

ext_skel是建立擴充套件的shell,在windows上無法執行,所以必須要有cygwin模擬unix環境

2:解壓完之後,我們需要在ext目錄中生成我們自己的擴充套件目錄.

我們直接win+r cmd 進入命令列,然後cd 跳轉到ext目錄,輸入以下指令:

php ext_skel_win32.php –extname=myext 或者

php.exe ext_skel_win32.php –extname=myext

這裡很容易出現錯誤

首先:php和php.exe指的是安裝在windows上的php,它的根目錄裡面有php.exe,目的是用來解析php檔案,所以我們需要將安裝的php目錄設定到環境變數中。

其次:如果沒有安裝cygwin或者沒有設定cygwin,就會出現以下錯誤。所以 ,我們需要安裝cygwin,然後開啟php原始碼ext目錄中的ext_skel_win32.php ,裡面有乙個變數叫$cygwin_path = 「c:/cygwin/bin」; 將它修改為你安裝的目錄並儲存,try again

如果依舊報錯,請看這張圖,你是否犯錯了。

一切完成之後 如果出現以下情況,則表明建立擴充套件目錄(骨架)成功,

裡面包含的目錄大概是這個樣子,其中我們需要修改的兩個檔案是(如箭頭所示)

3:新增依賴的php5ts.lib

將php二進位製包中的dev目錄下的php5ts.lib拷貝到你的擴充套件目錄中

4:(1)修改php_hello.h檔案

擴充套件新的函式:在php_function(confirm_myhello_compiled);行後新增一行 php_function(hello);

(2)修改hello.c 檔案

在陣列zend_function_entry myhello_functions增加一行

1. zend_function_entry myhello_functions =     /* must be the last line in myhello_functions */  

5. };

在php_function(confirm_myhello_compiled) 後新增我們的新函式

1. php_function(hello)  

4.

5:構建dll擴充套件檔案

接下來就是編譯擴充套件檔案了,用vs2008開啟hello.dsp,選擇編譯方式為release_ts,然後開始編譯,或者在通過命令列進入ext/hello 執行 msdev hello.dsp /make 「hello - win32 release_ts」 如果成功,則會在ext同級目錄release_ts中生成php_hello.dll。

到這裡基本主要任務基本完成了,但是這裡也是最容易出錯誤的。

最常見的錯誤 ,編譯時它會出現cannot open include file 「../main/config.win32.h」 結果到main資料夾根本就沒這個檔案。

所以,將win32build.rar和bindlib_win32.rar都解壓到php原始碼中win32/build目錄下,並將win32/build新增到環境變數

進入cmd 跳轉到php原始碼目錄,輸入

cscript /nologo configure.js –with-php-build=」../win32build」 –without-libxml –disable-odbc 回車後有可能出現

意思是沒有找打cl.exe,所以我們需要將安裝好的vs2008目錄中的的bin目錄新增到環境變數,我的機器上是」d:\vs2008\vc\bin」,再次執行,有可能依舊會報錯,圖我找不到了。。大概意思就是the c++ compiler is vc9.0(vs2008) at least 所以盡量使用vs2008以上的compiler

這個檔案可以在microsoft visual studio 10.0\common7\ide目錄下找到,複製到vc\bin目錄下即可。繼續執行語句,成功。在d:\php原始碼\main目錄下生成config.win32.h檔案。

開啟config.win32.h:找到裡面

如果你用vc10進行編譯,則需修改為

6:最後,我們將其拷貝到二進位制php目錄下的ext目錄,開啟php.ini,新增上 extension=php_hello.dll

重啟apache,測試自己的函式。

ps:當時我測試的函式是cock()

輸出結果:

到此結束。。。搞這個東西真是快瘋了,還好耐心的解決問題多次嘗試,最終成功。我將自己所遇到的問題都貼了出來方便大家參考。php擴充套件這東西挺好玩的,我們可以開發自己的php函式。不過前提是c/c++要學的很好。。。總之慢慢來吧,祝大家早日成功~

Windows下安裝Redis及開啟php擴充套件

當然我們很多時候都程式設計是在windows下的,現在把windows的redis也安裝一下 2.開啟乙個cmd視窗 使用cd命令切換目錄到 c redis 執行 redis server.exe redis.conf 3.這時候另啟乙個cmd視窗,原來的不要關閉,不然就無法訪問服務端了。4.同樣切...

在windows下安裝apache和php

注意 apache的配置檔案中loadmodule php5 module c php php5apache2.dll這個地方要改為php5apache2 2.dll php的windows安裝版好像檔案編譯不符合執行緒安全性,但是.zip檔案符合執行緒安全性,但是缺少php5ts.dll檔案,所以...

windows下用VSCODE開發stm32踩的坑

vscode vscode stm32cubemx openocd jlink自己網上找資源吧 mingw 或者mingw64 mingw mingw64資源也自己找吧 arm none eabi gcc arm none eabi gcc第乙個坑 建立工程時一定要開啟debug,否則編譯時應使用m...