`

在Windows下写PHP的C扩展

 
阅读更多

安装好如下软件: 


1. VC++ 6 
2. php二进制环境 
3. Cygwin. 



I. 下载php的源码包 
下载后php源码包解压后有个ext目录,这个目录就是负责开发扩展的目录,目录中有默认你扩展的所有源码。还有两个重要的文件:ext_skel , ext_skel_win32.php. 
ext_skel是创建扩展的shell,在windows上无法运行,所以就必须要有Cygwin。 

II. 建立php扩展骨架目录文件 
如果你的cygwin没有安装在c:\cygwin,进入php源码包\ext目录下,修改ext_skel_win32.php : 
  $cygwin_path = 'c:\cygwin\bin'; 
修改为你的cygwin目录 
  $cygwin_path = 'd:\cygwin\bin'; 

命令行方式进入ext目录然后运行: 
php ext_skel_win32.php --extname=myhello 
(当然,为了保证上面的命令行能正常运行,首先你得确保你的php目录在系统的环境变量里) 

运行该命令后,有人发现下面的错误 

Warning: fopen(myhello/myhello.dsp): failed to open stream: No such file or directory in D:\cygwin\php-5.2.6\ext\ext_skel_win32.php on line 45 
Warning: fopen(myhello/myhello.php): failed to open stream: No such file or directory in D:\cygwin\php-5.2.6\ext\ext_skel_win32.php on line 52 

说明你的 cygwin 安装不完整。要是没报错你的myhello扩展就创建成功了。这就是一个简单的扩展框架,用纯c语言编写。 

III. 添加依赖的php5ts.lib 
  在php的二进制包中的 dev目录下将 php5ts.lib 拷到我们的myhello目录中, 否则编译将通不过。 

IV. 添加hello c代码 
生成的myhello目录中有关键文件包括 
  myhello.dsp, 
  myhello.c, 
  php_myhello.h, 
其他文件暂时不必关心. 

提示:切忌myhello目录不可以挪移出ext目录,否则会编译报缺少php.h. 

1. 修改php_myhello.h 
扩展的新函数: 在PHP_FUNCTION(confirm_myhello_compiled); 行后添加一行 

  1. PHP_FUNCTION(confirm_myhello_compiled);  
  2. PHP_FUNCTION(myhello);  // 新增的行  

2. 修改myhello.c 
在PHP_FUNCTION(confirm_myhello_compiled) 后添加我们的新函数 

  1. PHP_FUNCTION(myhello){  
  2.     php_printf(”Hello C extension”);  
  3. }  


在数组zend_function_entry myhello_functions[]增加一行 

  1. zend_function_entry myhello_functions[] = {  
  2.     PHP_FE(confirm_myhello_compiled,    NULL)        /* For testing, remove later. */  
  3.     PHP_FE(myhello, NULL) // 新增的行  
  4.     {NULL, NULL, NULL}    /* Must be the last line in myhello_functions[] */  
  5. };  



V. 构建DLL文件 
用vc6打开我们的工程,就是myhello.dsp 
1. 修改编译方式为release: 选择Build->Set Active Configuration设置默认编译方式为Release, 否则会提示缺少php5ts_debug.lib ,其实就是php5ts.lib。 
2. 按F5编译。会在ext上级的Release_TS目录下生成php_myhello.dll 

提示:如果愿意使用命令行编译也是可以的,命令如下:

msdev myhello\myhello.dsp /MAKE "myhello - Win32 Release_TS" 


VI. 集成dll到php中。 
1. 把我们生成的 php_myhello.dll放到二进制php环境的ext目录下. 
2. 然后修改php.ini, 添加 extension=php_myhello.dll 重启apahce。 
3. 新建c_test.php 内容为 

  1. <?php myhello(); ?>   


在浏览器里打开会看到页面: 

hello C extension. 
分享到:
评论

相关推荐

    windows下开发PHP扩展

    在 Windows 操作系统下开发 PHP 扩展可以不使用 Cygwin,这篇教程将指导您从头开始创建自己的 PHP 扩展。 准备工作 首先,您需要 PHP 源码包和 Windows 下的二进制包,以及安装 Visual C++。并将 Microsoft Visual...

    windows下编译php­beast扩展

    在Windows环境下编译PHP-beast扩展是一个较为复杂的过程,涉及到选择合适的编译器、设置编译环境、准备编译文件、以及执行具体的编译步骤。本文将详细说明如何在Windows系统中编译PHP-beast扩展,同时会提供必要的...

    Windows 下redis的的扩展

    在Windows环境下,Redis的使用可能相对复杂,但通过一些扩展工具和配置,我们可以轻松地将Redis集成到PHP环境中。本文将详细介绍如何在Windows上安装Redis,以及如何利用php5.5版本的Redis扩展和rediswatcher工具...

    使用C语言来扩展PHP,写PHP扩展dll

    ### 使用C语言扩展PHP:构建PHP扩展DLL #### 前言 随着PHP的应用范围不断扩大,对于性能的要求也日益提高。而C语言作为一种底层语言,其执行效率远高于PHP这样的高级语言。因此,通过C语言编写PHP扩展可以显著提升...

    windows下php5.3 redis扩展 php_redis.dll

    在Windows环境下,PHP 5.3的Redis扩展是开发者与Redis数据库进行交互的重要工具。Redis是一种高性能的键值数据存储系统,广泛应用于缓存、消息队列等场景。本文将详细解析如何在Windows上安装并配置PHP 5.3的Redis...

    windows php7-memcache扩展

    **Windows环境下PHP7-Memcache扩展的安装与配置** 在Windows服务器上运行PHP应用程序时,为了提高数据存储和检索的效率,我们常常会使用到Memcache扩展。Memcache是一款广泛使用的分布式内存对象缓存系统,它能有效...

    php扩展yaf 3.3.3 for Windows-php7.3-php8.0-7.4.zip

    《PHP扩展Yaf 3.3.3在Windows环境下的应用与配置详解》 Yaf,全称为Yet Another Framework,是C语言编写的一款高性能、轻量级的PHP框架,其核心设计目标是提高PHP应用程序的运行效率。Yaf 3.3.3是该框架的一个稳定...

    php7,memcache扩展文件,windows

    标题 "php7,memcache扩展文件,windows" 涉及到的是PHP编程语言与Memcached缓存系统在Windows环境下的集成。Memcache是广泛应用于Web开发中的一个高性能分布式内存对象缓存系统,它可以减轻数据库负载,提高动态、...

    Windows下php7.0 reddis扩展(亲测可用)

    2. **复制到PHP扩展目录**:将下载的dll文件复制到PHP的`ext`目录下,这个路径通常为`C:\php\ext`(假设你的PHP安装在C盘)。 3. **编辑php.ini配置**:在PHP的配置文件`php.ini`中,添加以下行: ``` extension=...

    php intl扩展文件

    - 对于Windows系统,根据系统的位数(32位或64位),intl扩展文件应放置在相应的系统目录下:64位系统放在`C:\Windows\SysWOW64`,32位系统放在`C:\Windows\System32`。 - 安装完成后,还需要在php.ini文件中启用...

    Memcached For PHP Windows版 带Memcache扩展和安装使用说明

    2.在终端(也即cmd命令界面)下输入'c:\memcached\memcached.exe -d install'安装 3.再输入:'c:\memcached\memcached.exe -d start'启动。NOTE:以后memcached将作为windows的一个服务每次开机时自动启动。这样...

    cygwin windown php扩展开发工具

    在Windows环境下进行PHP扩展开发,通常开发者会遇到各种平台差异问题,因为PHP主要设计于类Unix系统,如Linux。然而,Cygwin提供了一个在Windows上运行Linux/Unix应用程序的解决方案,它创建了一个兼容层,使得...

    php扩展开发流程,很详细

    1. 安装VC++ 6:这是微软的Visual C++ 6.0编译器,用于编译C语言扩展。 2. PHP二进制环境:你需要下载并安装PHP的二进制版本,这将提供编译扩展所需的库和配置。 3. Cygwin:这是一个在Windows上模拟类UNIX环境的...

    widows 下的php扩展

    本文将详细介绍如何在Windows系统下利用现有的工具和技术来开发自定义的PHP扩展,让PHP拥有自己编写的函数。这不仅能够增强PHP的功能性,还能提升程序的性能。下面将按照步骤说明具体的实现过程。 #### 二、准备...

    php7.0以上swoole扩展

    Swoole是一个高性能的、基于C语言开发的PHP扩展,专为PHP提供了异步并行编程的能力。标题指出“php7.0以上swoole扩展”,这意味着Swoole扩展自PHP 7.0版本起就被广泛支持,这在很大程度上提升了PHP处理网络并发和I/O...

    VC 建立php扩展

    标题中的“VC建立php扩展”指的是使用Visual C++(VC)编译器来构建PHP的扩展模块。在PHP中,扩展通常用C或C++编写,以增加PHP语言...通过博客文章和提供的工具,我们可以学习如何在Windows环境下使用VC来实现这一目标。

    Windows下PHP5和Apache的安装与配置.rar

    这个教程将详细阐述如何在Windows环境下安装和配置这两个组件,以便于进行PHP编程和网站的本地开发。 首先,Apache是世界上最流行的开源Web服务器软件,它轻量级且易于管理,支持多种操作系统,包括Windows。PHP5则...

    RabbitMQ 的windows php 扩展php_amqp-1.2.0-5.3-ts-vc9-x86.dll

    本篇主要讲解如何在Windows上安装并使用RabbitMQ的PHP扩展——`php_amqp`,特别是针对PHP 5.3线程安全(TS)版本的VC9编译的`php_amqp-1.2.0-5.3-ts-vc9-x86.dll`扩展。 首先,我们需要确保已经安装了RabbitMQ...

Global site tag (gtag.js) - Google Analytics