• windows10下编译php扩展


    在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_<ext>.dll

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

  • 相关阅读:
    杭电2059
    杭电2058
    php错误大集合
    显示IP地址
    超简单好用的屏幕录像工具
    jquery“不再提醒"功能
    KindEditor编辑器中的class自动过滤了
    实用案例:切换面板同时切换内容
    仿51返利用户图解教程
    JavaScript调用dataTable并获取其值(ASP.Net,VS2005)
  • 原文地址:https://www.cnblogs.com/si812cn/p/16009032.html
Copyright © 2020-2023  润新知