PHP7 windows 10 VS編譯(擴展開發)

  • PHP7.2及以上官方教程

https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2php

  • PHP7.1及如下官方教程

https://wiki.php.net/internals/windows/stepbystepbuildgit

  • php7要求使用vc2015


Visual Studio 2015 社區版本

PHP-sdk-binary-tools-20110915.zip (http://windows.php.net/downloads/php-sdk/下載)
deps-7.0-vc14-x86.7z                  (https://windows.php.net/downloads/php-sdk/archives/下載)
php-7.0.2                        (http://php.net/downloads.php下載)github

 

第一步windows

  • 解壓php-sdk-binary-tools的二進制包,譬如我解壓到個人D:\vcmyprojects\php-sdk文件夾中,如今的目錄結構以下


D:\vcmyprojects\php-sdk
    --bin
    --script
    --share安全

 

而後,這個是你已經安裝完成了visual studio 2015,打開VS2015開人員命令提示,注意,編譯是必定要用這個進,普通的cmd不行,走了不少彎路。。。session

 

  •  #進入目錄
cd D:\vcmyprojects\php-sdk
  • #設置環境變量
bin\phpsdk_setvars.bat
  • 編輯c:\php-sdk\php-sdk-binary-tools\bin\phpsdk_buildtree.bat文件
    在GOTO EXIT前加入
MD %_%\vc14\x86\deps\bin
MD %_%\vc14\x86\deps\lib
MD %_%\vc14\x86\deps\include
MD %_%\vc14\x64\deps\bin
MD %_%\vc14\x64\deps\lib
MD %_%\vc14\x64\deps\include
  • #建立經常使用的php-sdk目錄
bin\phpsdk_buildtree.bat phpdev
  • 解壓deps-7.0-vc14-x86.7z到D:\vcmyprojects\php-sdk\phpdev\vc14\x86\deps文件夾下覆蓋,裏邊都是咱們須要的庫文件和一些必要的工具等等。

編譯安裝phpphp7

回到VS2015開發人員命令提示函數

  • #進入php源目錄文件夾
cd D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2
buildconf

 

  • #查看帶的擴展和編譯命令
configure --help
  • 若是你沒有安裝php,如今這裏就幫助到你了,能夠先編譯安裝一下php
configure --disable-all --enable-cli


而後,你會看到Type 'nmake' to build PHP,而後編譯工具

nmake

在D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\Release_TS文件夾下就生成了php.exe文件,環境變量中加入這個路徑,好在命令行中能使用php命令。性能

開發PHP的第一個擴展

  • 安裝cygwin,我用的是最新的x86版本的,下載安裝到c:\cygwin,這樣子不須要修改ext_skel_win32.php
  • 進入擴展目錄,生成擴展文件夾
cd D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\ext
php ext_skel_win32.php --extname=raintest1


這時候咱們在D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\ext就看到了本身的目錄raintest1,打開raintest1\php_raintest1.h,在

打開ext\就會看到一個test文件夾,這個就是你的擴展。

  •  打開VS選擇「文件」--「新建」--「從現有代碼建立目錄」

  • 選擇C++

  • 這裏選擇你的php擴展文件夾路徑,而且給項目命名

  • 選擇「使用 visual studio」,項目類型選擇「動態連接庫(DLL)項目」,後面一直默認下一步一直到完成。

  • 剛開始打開會有不少錯誤,咱們接下來開始配置項目。

  • 先把項目解決方案配置改成Release

  • 右鍵項目屬性,C/C++,常規,附加包含目錄,編輯

加入如下幾個php源碼目錄(實際目錄以開發者本身的目錄爲準):

E:\php-xxx-src
E:\php-xxx-src\main
E:\php-xxx-src\TSRM
E:\php-xxx-src\Zend

右鍵項目屬性,C/C++,預處理器,預處理器定義,編輯,加入如下變量:

ZEND_DEBUG=0
PHP_EXTENSION
PHP_WIN32
ZEND_WIN32
HAVE_XXX=1
COMPILE_DL_XXX
ZTS

注意,要把上面的 XXX 改成大寫的擴展名 (如擴展叫 tonyenc 就把 XXX 改爲 TONYENC),不然 PHP 將沒法識別擴展。ZTS用於告訴編譯器開啓線程安全(若是去掉就是不開啓)。注意,線程安全的開啓與否,取決於前面下載到的 C:\php7-Win32-VC14-x64-ts,它也是啓用了線程安全編譯,因此這裏開啓線程安全。

  • 在左側「鏈接器」-「輸入」欄目下,「附加依賴項目」中,加入:C:\php7-Win32-VC14-x64-ts\dev\php7ts.lib,即前面下載獲得的已編譯的 PHP 程序。
  • 點肯定,而後菜單中選擇「生成」-「生成解決方案」,恭喜你,編譯器報錯:沒法打開包括文件 ../main/config.w32.h,這時把 C:\php7-Win32-VC14-x64-ts\win32\build\config.w32.h.in 複製到 C:\php7-Win32-VC14-x64-ts\main\config.w32.h (注意沒有了後面的 in),而後在 config.w32.h 中加入:
#define PHP_COMPILER_ID "VC14"

這將指明運行庫是 VC14,與前面下載到的已編譯 PHP 程序匹配,從新生成下解決方案,這樣就能成功編譯了!

 

打開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

生成解決方案,在項目根目錄的Release文件夾裏找到本身的php擴展phptest.dll,複製到php的ext文件夾裏,在php.ini裏配置上:

extension=phptest.dll

重啓IIS,新建一個站點,在裏面新建一個test.php文件

<?php 
echo test_echo("123");

運行獲得結果:

這個test_echo函數,就是咱們本身的自定義函數了,你也能夠根據需求,開發本身的擴展來提升php的性能。

 

  • pecl擴展或者github上面的php擴展編譯
  1. 下載源代碼並解壓值ext目錄(或者pecl目錄,沒有能夠新建一個。)
  2. 編譯安裝(memcache爲例,session和zlib是依賴擴展,因此一塊兒編譯)
nmake clean
buildconf --force
configure --disable-all --enable-cli --enable-memcache=shared --enable-session --enable-zlib
nmake
  • php cli指定配置文件並顯示擴展列表
php -c tmp-php.ini -m
相關文章
相關標籤/搜索