zoukankan      html  css  js  c++  java
  • 用VS开发PHP扩展,PHP调用C动态链接库

    环境:

    VS2013 https://blog.csdn.net/m0_37477061/article/details/83447773

    Cygwin(http://www.cygwin.com/)

    PHP5.3.29二进制文件(https://pan.baidu.com/s/1Fw13nu8hqhQn2Z_eDPAJow 提取码:p8io)

    PHP5.3.29源码(https://pan.baidu.com/s/1RP8Q9GP9mJMDJBG-8ATO_A 提取码:b3cm)

    phpstudy2016

    步骤:

    请确保上述软件或文件都已配置。

    打开文件...PHP-5.3.29-srcext ext_skel_win32.php 修改cygwin的路径,如果是对的就不改。

    打开cmd命令行,进入路径...PHP-5.3.29-srcext,输入命令php ext_skel_win32.php --extname=test

    生成扩展骨架,test即为php扩展名。该test文件夹位于...PHP-5.3.29-srcext

    说明:下图为了展示成功的输出,故生成的扩展名为test_2,后续截图均使用test。

    生成的扩展文件目录如下:

    打开VS2013, “文件”--“新建”--“从现有代码创建项目”--“C++” ,项目文件位置选择上面的test文件夹,项目名称phptest,“生成动态链接库dll项目”。

    接下来开始配置我们的项目:

    1. 项目解决方案配置改为Release

    2. 项目 - 项目属性 - C/C++ - 常规 - 附加包含目录 - 添加如下内容(...全为自己的真实路径)

      ...PHP-5.3.29-src

      ...PHP-5.3.29-srcmain

      ...PHP-5.3.29-srcTSRM

      ...PHP-5.3.29-srcend

    3. 项目 - 项目属性 - C/C++ - 预处理器 - 预处理器定义 - 添加如下内容

      ZEND_DEBUG=0

      PHP_EXTENSION

      PHP_WIN32

      ZEND_WIN32

      HAVE_TEST=1(test要改成你的扩展名称)

      COMPILE_DL_TEST(同上)

      ZTS(这一个变量加上是开启线程安全,不加是关闭线程安全)

    4. 项目 - 项目属性 - 链接器 - 输入- 添加如下内容(注意是二进制目录不是源码目录)

      ...php-5.3.29-Win32-VC9-x86devphp5ts.lib

    5. 打开文件...PHP-5.3.29-srcmain config.w32.h,添加#define PHP_COMPILER_ID "VC9" ,因为PHP-5.3.29是用VC9编译的,视自己情况修改(例如php5.6.9就是VC11编译的 )。

    配置结束后点击生成解决方案,此时应该不会再报任何错误,接下来就是写我们的C函数。

    需要两个文件分别为 test.cphptest.h

    phptest.h种声明方法,该文件此处原为PHP_FUNCTION( confirm_test_compiled )

    我将原本的测试函数改为test_echo,也就是上面说的 confirm_test_compiled 改为test_echo。

    再新建一个方法名为hello。

    test.c中与头文件保持一致,上为声明,下为方法的实现。

    此时再重新生成解决方案,在... estRelease目录下找到 php_test.dll ,将该文件复制到PHP的ext文件夹(不是源码也不是二进制而是phpstudy的php文件夹)下。

    大功告成,在任意站点里新建php文件进行测试。

    <?php 
    echo test_echo("<br>123<br>");
    echo '<br><br><br>';
    echo hello();
    

    至此,可以开始PHP扩展开发了。

  • 相关阅读:
    语言精粹【摘要】
    【转】一个Java程序员应该掌握的10项技能
    比较有用的网址
    推荐一些国内的Jquery CDN免费服务
    CSS3动画【归纳总结】
    scrollTo与border结合使用的小玩意
    aria-label及aria-labelledby应用//////////[信息无障碍产品联盟]
    aria初探(一)
    没有this的JavaScript
    Front-end Job Interview Questions
  • 原文地址:https://www.cnblogs.com/poziiey/p/13034780.html
Copyright © 2011-2022 走看看