如何使用C++开发PHP扩展(下)
更多的情况是业务中已经有独立的 api 库,形式为 libxxx.a / libxxx.so,PHP程序中需要调用这些 api,所以这时就要编写PHP扩展来实现。这时是使用静态库 libxxx.a ,还是使用 libxxx.so 呢 ?常见的做法是使用静态库 libxxx.a ,下面一步一步介绍:
1. 创建静态库
1.1 执行命令及内容如下:
[root@localhost ~]# mkdir libhello
[root@localhost ~]# cd libhello/
[root@localhost libhello]# vim hello.h
[root@localhost libhello]# vim hello.cpp
hello.h
#include <string>
using namespace std; string say();
hello.cpp
#include "hello.h" string say()
{
string str = "Hello World!!!!!";
return str;
}
1.2 编译为 libhello.a (可参考:C++动态库和静态库)
2. 使用骨架脚本生成PHP扩展 discuz(可参考:如何使用C++开发PHP扩展(上))
3. 把 hello.h,libhello.a 放到 PHP扩展文件夹中,如下:
[root@localhost ~]# cp libhello/libhello.a php-5.3.24/ext/discuz/lib
cp:是否覆盖“php-5.3.24/ext/discuz/lib/libhello.a”? y
[root@localhost ~]# cp libhello/hello.h php-5.3.24/ext/discuz/include/
cp:是否覆盖“php-5.3.24/ext/discuz/include/hello.h”? y
4. 修改 config.m4,内容如下:
dnl $Id$
dnl config.m4 for extension discuz PHP_ARG_ENABLE(discuz, whether to enable discuz support,
Make sure that the comment is aligned:
[ --enable-discuz Enable discuz support]) if test "$PHP_DISCUZ" != "no"; then
PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, 1, EXTRA_LDFLAGS) dnl set include path
PHP_ADD_INCLUDE(./include) dnl checking libhello.a is exists or not
AC_MSG_CHECKING([for lib/libhello.a])
if test -f ./lib/libhello.a; then
AC_MSG_RESULT([yes])
PHP_ADD_LIBRARY_WITH_PATH(hello, ./lib, EXTRA_LDFLAGS)
else
AC_MSG_RESULT([not found])
AC_MSG_ERROR([Plaese check ./lib/libhello.a])
fi PHP_NEW_EXTENSION(discuz, discuz.cpp, $ext_shared)
fi
5. 修改discuz.cpp
5.1 添加头文件
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif #include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_discuz.h" #include <string>
#include "hello.h"
5.2 修改 discuz_say 函数,如下:
/* {{{ proto string discuz_say()
*/
PHP_FUNCTION(discuz_say)
{
string str = say();
RETURN_STRINGL(str.c_str(), str.length(), 1);
}
6. 编译扩展(可参考:编译PHP扩展的两种方式)
7. 开始测试吧
[root@localhost ~]# /usr/local/php-5.3.24/bin/php hi.php
Hello World!!!!!
来源:python脚本自动迁移
如何使用C++开发PHP扩展(下)的更多相关文章
- windows下开发PHP扩展dll(无需Cygwin)
windows下开发php扩展网上很多资料都说需要Cygwin,其实完全可以不必安装该东东.没错,是可以在linux下生成骨架后拷到windos下来用,但是,如果没有linux环境呢?什么,装虚拟机? ...
- 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩 ...
- 【翻译】我钟爱的Visual Studio前端开发工具/扩展
原文:[翻译]我钟爱的Visual Studio前端开发工具/扩展 怎么样让Visual Studio更好地编写HTML5, CSS3, JavaScript, jQuery,换句话说就是如何更好地做 ...
- 开发 chrome 扩展 GitHub-Remarks 的一些想法以及遗憾
前文 对于单页应用中如何监听 URL 变化的思考 说到我在开发 chrome 扩展 GitHub Remarks 中遇到的一个问题,本文来聊聊开发这个扩展的前后心路历程. 为什么开发这个扩展?前文说到 ...
- 手把手教你开发chrome扩展
转载:http://www.cnblogs.com/walkingp/archive/2011/04/04/2003875.html 手把手教你开发chrome扩展一:开发Chrome Extenst ...
- 如何开发 Laravel 扩展包并发布到 Composer
如何开发 Laravel 扩展包并发布到 Composer 发布于 2019-01-22 cxp1539 1074 Vie 开发扩展包 我们来做一个根据第一个字符或者汉字生成头像的larave ...
- 手把手教你开发Chrome扩展二:为html添加行为
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 上一节我们 ...
- 使用C++开发PHP扩展
目前,PHP编程语言也是相当成熟,各种文档,各种问题,只要Google一下,总有你想要的答案.当然"如何开发PHP扩展"的文章也不少,但是很少有专门来介绍使用C++开发PHP扩展的 ...
- 如何有效地开发 Jmix 扩展组件
扩展组件的概念在使用 Jmix 框架开发中扮演着非常重要的角色.我们将在本文探索什么是扩展组件以及 Jmix Studio 在扩展组件开发和应用程序模块化方面能给开发者带来什么帮助. Jmix 中的扩 ...
随机推荐
- [数据结构]常见数据结构的typedef类型定义总结
目录 数据结构类型定义: 1.线性表 线性表(顺序存储类型描述): 线性表(动态存储类型描述) 2.线性表的链式表示 双链表的结点类型描述: 静态链表结点类型的描述: 3.栈的数据结构 顺序栈的数据结 ...
- .Net Core 3.1 WebApi使用Swagger生成Api文档
用swagger生成Api文档 1.安装Swashbuckle.AspNetCore 右键单击"解决方案资源管理器" > "管理 NuGet 包"中的项目 ...
- .NET6 微服务——CI/CD(1):搭建Jenkins并实现自动构建
CI/CD 它的意思是 持续集成/持续部署,这也不是新概念.那些八股文就不写了,说话的方式简单点:如果成功搭建CI/CD环境,当你需要迭代线上程序时,只需通过git提交代码就可以,其他什么都不用做.是 ...
- Eclipse+Maven+JDK+tomcat搭建java的开发环境
由于最近有几个同事都在学习java方面的东西,所以我写个博文做下笔记,其中遇到过很多个坑,这里就不多说了 首先,我用的是Eclipse+Maven的组合,用Ecplise是周边java开发的同事用这个 ...
- Linux中常用的监控性能的命令(sar、mpstat,vmstat, iostat,)详解
Linux中常用的监控性能的命令有: sar:能查看CPU的平均信息,还能查看指定CPU的信息.与mpstat相比,sar能查看CPU历史信息 mpstat:能查看所有CPU的平均信息,还能查看指定C ...
- [转]Python3字符串前缀u、b、r
1.无前缀 & u前缀 字符串默认创建即以Unicode编码存储,可以存储中文. string = 'a' 等效于 string = u'a' Unicode中通常每个字符由2个字节表示 ...
- 从如何使用到如何实现一个Promise
前言 这篇文章我们一起来学习如何使用Promise,以及如何实现一个自己的Promise,讲解非常清楚,全程一步一步往后实现,附带详细注释与原理讲解. 如果你觉的这篇文章有帮助到你,️关注+点赞️鼓励 ...
- HDU 1576 A/B (两种解法)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 分析:等式枚举法,由题意可得:, ,代入 , 得:,把变量 合在一起得: :即满足 为 倍 ...
- MASA Framework - 整体设计思路
源起 年初我们在找一款框架,希望它有如下几个特点: 学习成本低 只需要学.Net每年主推的技术栈和业务特性必须支持的中间件,给开发同学减负,只需要专注业务就好 个人见解:一款好用的框架应该是补充,而不 ...
- Hackurllib
是的大部分的http请求库都不够hacking 不过有w8ay师傅的hack-requests 但是我想造一个属于自己的轮子它将会足够简单足够hacking 用这个名字是因为我选择了urllib做为最 ...