热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

windows10下编译php扩展

在Windows上开发PHP扩展模块虽然不怎么用到windows下开发php扩展,但是有的时候有些人就是想安装到windows下运行。没有办法,只能针对性的重新编译。这里较全面的介

在Windows上开发PHP扩展模块

虽然不怎么用到windows下开发php扩展,但是有的时候有些人就是想安装到windows下运行。没有办法,只能针对性的重新编译。

这里较全面的介绍如果在windows下编译php扩展

一、开发环境搭建

1.      Windows10 64位,

下载wampserver64位,https://www.wampserver.com/en/#wampserver-64-bits-php-5-6-25-php-7

在安装wampserver64位时,尽量把相关的SDK安装全了。尤其是Microsoft Visual C++ 2015-2022 Redistributable(x64)。这个东西到官网下载最快,不要到其他网站,很多垃圾。不安装这些sdk,可能wampserver64起不来哦。

因为我用的是php7.2.34版本,所以还需要下载php7.2.34版本的源代码。https://www.php.net/distributions/php-7.2.34.tar.gz

因为php-7.2.34使用VC15 x64编译的,VC15对应的Visual Studio 2017。所以尽量对应的版本来编译。

还需要下载Cygwin (http://www.cygwin.com)

Cygwin是在调用PHP扩展模块生成工具ext_skel_win32.php时使用,主要模拟一些unix的命令,否则该文件中的一些代码是执行不通的哦。注意:安装时提示选取镜像站点下载模块时,选择.cn结尾的站点速度最快。

安装完成Cygwin之后(安装路径记为[Cygwin Path]),需要将[PHP Source]\ext\ext_skel_win32.php文件中的$cygwin_path设置为[Cygwin]\bin目录路径。
这里有很多坑,但是一些环境必要的插件要勾选。具体参考一下这篇文章https://blog.csdn.net/u010356768/article/details/90756742。如果有额外你需要用的,自己追加啊。

最终会在桌面生成一个Cygwin64 Terminal的快捷方式。

cygwin 安装路径c:\cygwin64,根据你实际安装的来替换。

“PHP源文件目录/ext/ext_skel_win32.php”,在这里就是:E:\c_source_code\php-5.2.5\ext,其中主要是修改其中的

cygwin路径。$cygwin_path = 'c:\cygwin64\bin';

把$cygwin_path修改为你实际安装cygwin的路径,这样在下一步生成扩展的时候就不太会出错了。

二、生成扩展

先把php.exe追加到操作系统的环境变量里。例如:

 

 

 再打开cmd命令,进入[PHP Source]\ext\目录,执行php ext_skel_win32.php --extname=foo,最终在[PHP Source]\ext\目录下会生成一个foo目录,扩展插件样例代码生成成功。

然后用VS2017在foo目录创建一个工程,并做一些配置:具体参考:https://www.cnblogs.com/taotaodmw/p/14206707.html。该步骤要注意,我们是php7.2.34,需要把php7ts.lib配置到vs2017里。

但是这里需要选择Windows SDK版本为10,如果选择其他版本,有可能编译的时候说找不到xxx.h文件。

正常这样下来,foo.dll是会在[PHP Source]\ext\foo\x64\release下生成了。

最后把这个foo.dll复制一份到

把foo.dll拷到C:\wamp64\bin\php\php7.2.34\ext目录下,修改名称为php_foo.dll,这样在php.ini(注意是appache里的php.ini链接,参考:C:\wamp64\bin\apache\apache2.4.51\bin\php.ini。不改这个重启也无用)里加上一行extension=foo就可以了。因为配置文件是按照这样的格式识别的:extension='php_.dll

重启一下apache,查看phpinfo();,会发现我们的PHP扩展foo()已经加载进来,已经可以使用这个foo扩展了。

 

 



推荐阅读
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 如何配置VisualSVN以确保提交时必须填写日志信息
    在软件开发团队中,成员们有时会忘记在提交代码时添加必要的备注信息。为了规范这一流程,可以通过配置VisualSVN来强制要求团队成员在提交文件时填写日志信息。本文将详细介绍如何设置这一功能。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • Redis 脑裂现象及其应对策略
    本文探讨了 Redis 集群中的脑裂现象及其解决方案,包括脑裂的成因、影响以及如何通过配置项防止脑裂的发生。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在本地环境中调试远程服务器上的网站代码执行问题,可以通过以下步骤实现:首先,在本地安装 Visual Studio 并配置远程调试工具。接着,确保服务器和本地机器之间的网络连接畅通,并正确设置防火墙规则以允许调试流量。最后,使用 Visual Studio 的远程调试功能连接到服务器,进行代码调试。这种方法不仅提高了开发效率,还减少了在服务器上直接操作的风险。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • Linux基础知识:Vi与Vim编辑器详解
    Linux基础知识:Vi与Vim编辑器详解 ... [详细]
author-avatar
arashilan
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有