Rumah pembangunan bahagian belakang 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

N4O(S$XK@E`C9OF4C]6KJ5S.png

从网络安装

)1K)3P(JIVWDRC[%X{9SXOF.png

默认安装C盘

YNP][{1BEA4[$RO8LY)W8(6.png

下载缓存随意,安装结束记得删掉,我是放在桌面的

P1BGZT_7WCT$Q]0G]][MFNM.png

WKJB]]8J3@)4%G5Q~@1$SQM.png

在中国,就选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

4XNIW}{NYN00UOU[{9}LINX.png

这里改成你的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扩展名。

NWZEMYK%$31[1Z61(OUZ]]N.png

打开E:\vs_c++\test\phpext\php-7.0.5-src\ext就会看到一个test文件夹,这个就是你的扩展。

 4.打开VS选择“文件”--“新建”--“从现有代码创建目录”

0`YI$2`)DH]JF13XDS9~[NU.png

选择C++

WES@XWBC4JA%DH`ZN~B%NDV.png

这里选择你的php扩展文件夹路径,并且给项目命名

D2%MS]7AAQ]9UG9A%6{DN(A.png

选择“使用 visual studio”,项目类型选择“动态链接库(DLL)项目”,后面一直默认下一步一直到完成。

`@9IUL[66UA3Q$X]S1X(M44.png

5.刚开始打开会有很多错误,我们接下来开始配置项目。

88WOY5)SB]}%ZDMD887SO3P.png

先把项目解决方案配置改为Release

Y9`ZA)O{HPEZ{LQF~8OONYI.png

右键项目属性,C/C++,常规,附加包含目录,编辑

1@]B6TC[(OMYW3`52(FV507.png

加入以下几个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不识别扩展)

Z6KO{4[HDVU7]%)J$2KJBA0.png

生成解决方案,错误信息显示找不到“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文件里加上:

1

#define PHP_COMPILER_ID "VC14"

Salin selepas log masuk

打开E:\vs_c++\test\phpext\php-7.0.5-src\ext\test\test.c

找到这一段代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

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);

}

Salin selepas log masuk

将confirm_test_compiled改成test_echo

再找到这一段代码:

1

2

3

4

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[] */

};

Salin selepas log masuk

将里面的confirm_test_compiled也改成test_echo

生成解决方案,在项目根目录的Release文件夹里找到自己的php扩展phptest.dll,复制到php的ext文件夹里,在php.ini里配置上:

extension=phptest.dll

重启IIS,新建一个站点,在里面新建一个test.php文件

1

2

<?php

echo test_echo("123");

Salin selepas log masuk

运行得到结果:

K(S}1}S`((M%W2(~8F}P~]3.png

这个test_echo函数,就是我们自己的自定义函数了,你也可以根据需求,开发自己的扩展来提高php的性能。

推荐学习:php视频教程

Atas ialah kandungan terperinci 如何用VS2015(vs14)开发PHP7扩展. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)