• Windows下编译PHP的C扩展


    我的环境是xp,vc++6.0和已经装好的php环境

    如果需要编译现在环境的扩展,则需要去http://www.php.net/releases/这个地址找到和自己php版本一样的源码

    这是我的版本

    首先推荐大家看看这篇文章

    http://php.chinaunix.net/manual/zh/install.windows.building.php

    请大家认真读完这篇文章,然后按照文章所说,我们开始进行下面的步骤

    下载2个工具

    a)PHP 站点中的 win32 编译工具 » http://www.php.net/extra/win32build.zip

    b)PHP 使用的 DNS 解析器的源代码:» http://www.php.net/extra/bindlib_w32.zip(将这个进行编译,然后替换win32build.zip中的resolv.lib

    下载完成后,将E:\Project\app\win32build\bin加入PATH目录下面,接下来

    1.建立一个工作目录E:\Project\app

    2.将php和上述两个工具全部解压至1的目录中,最后的层次应该是这样的,如下图:

    【编译resovle.lib】

    打开VC++,打开工作空间bindlib.dsw,然后直接build(F7),然后在他的DEBUG目录下面找到resolv.lib,复制,粘贴到E:\Project\app\win32build\lib,替换。

    然后请大家再来参考这篇文章http://aiyooyoo.com/index.php/archives/212/

    我们先从(11)条开始看

    1.执行buildconf.bat,效果如下:

    2.执行:cscript /nologo configure.js --with-php-build="../win32build" --without-libxml  --disable-odbc,可以执行cscript /nologo configure.js --help查看帮助

    这个用红线框出来的,就是我们后面编译扩展时候需要的文件。

    3.执行下图的代码,增加自己的php扩展(HelloWorld)

    然后查看自己的ext目录下面,多了一个HelloWorld

    4.用VC++打开HelloWorld这个工程

    a)打开php_HelloWorld.h这个文件,增加如下代码

    PHP_FUNCTION(confirm_HelloWorld_compiled);    /* For testing, remove later. */
    PHP_FUNCTION(PhpTestFunc);//yimiao add

    b)打开HelloWorld.c这个文件,增加如下两段代码

    /* {{{ HelloWorld_functions[]
     *
     * Every user visible function must have an entry in HelloWorld_functions[].
     */
    const zend_function_entry HelloWorld_functions[] = {
        PHP_FE(confirm_HelloWorld_compiled,    NULL)        /* For testing, remove later. */
        PHP_FE(PhpTestFunc, NULL)
        {NULL, NULL, NULL}    /* Must be the last line in HelloWorld_functions[] */
    };
    PHP_FUNCTION(PhpTestFunc)
    {
        php_printf("this is a test function");
    }

    c)编译,编译的时候会出错,解决方法请参照上述文章中的(12)进行解决。继续编译,如果还是有错,提示

    LINK : fatal error LNK1181: cannot open input file "php5ts.lib",然后从你自己在windows上安装的PHP环境中找到这个文件,然后拷贝到现在源码包的根目录下,继续编译

    需要在工具-》选项-》目录中(library和include),添加php所在的目录

    如果不出意外就可以成功了,有点奇怪的是我的dll文件并没有出现在hellowordl下面的release,而是出现在E:\Project\app\php5.3\Release_TS下面。

    然后拷贝到你的php环境ext目录下面,打开扩展。查看phpinfo。

    最后编写个测试页面,调用里面的函数PhpTestFunc。OK至此,扩展添加结束。

  • 相关阅读:
    TCP拥塞控制机制
    C/S 与 B/S 区别
    ext4文件系统新特性
    关于TCP慢启动和拥塞避免的题
    [信息图表]移动学习 Go Study
    [时间线]Android市场的发展
    学习,只有勤奋是不够的……
    UNIX域套接字实例
    程序员的本质
    淘宝Web服务器Tengine正式开源
  • 原文地址:https://www.cnblogs.com/yimiao/p/2530654.html
Copyright © 2020-2023  润新知