C++实现PHP扩展

HIL(硬件在环)技术汇总梳理 HIL(Hardware-in-the-Loop)测试领域的知名公司有dSPACE、NI、Vector和speedgoat等,本文是针对这几家HIL技术的对比分析。 阅读详情

使用Ubuntu12.04开发环境


一、修改config文件

config.m4文件是编译基础中最核心的文件,这个文件主要用于autoconfi来产生configure配置文件,继而自动生成Makefile文件。

1. 生成扩展模块框架

#./ext_skel  --extname=ext_name

2. 修改config.m4文件

这里有几个重要的宏命令如下:

dnl 是注释;

PHP_ARG_WITH或者PHP_ARG_ENABLE指定了PHP扩展模块的工作方式,前者意味着不需要第三方库,后者正好相反;

PHP_REQUIRE_CXX 用于指定这个扩展用到了C++;

PHP_ADD_INCLUDE 指定PHP扩展模块用到的头文件目录;

PHP_CHECK_LIBRARY 指定PHP扩展模块PHP_ADD_LIBRARY_WITH_PAH定义以及库连接错误信息等;

PHP_ADD_LIBRARY(stdc++, "", EXTERN_NAME_LIBADD) 用于标准C++库链接进入扩展;

PHP_SUBST(EXTERN_NAME_SHARED_LIBADD)  用于说明这个扩展编译成动态库的形式;

PHP_NEW_EXTENSION 用于指定哪些源文件应该被编译,文件与文件之间用空格隔开;


ext_skel 默认生成的模块框架是针对C的,我们要使用C++进行PHP扩展。那除以上的PHP_REQUIRE_CXX, PHP_ADD_LIBRARY两个宏

必需外,还要把ext_name.c改名为ext_name.cpp

修改类似

PHP_REQUIRE_CXX()
INCLUDES=”$INCLUDES `mysql_config –cflags`”
PHP_ADD_LIBRARY(stdc++, “”, EXTRA_LDFLAGS)
EXTRA_LDFLAGS=”$EXTRA_LDFLAGS `mysql_config –libs` -lmemcached”
AC_CHECK_HEADERS([mysql/mysql.h])
CPPFILE=”ext_name.cpp antiForbitWord.cpp antiBaseDict.cpp Trie.cpp Logger.cpp antiEncodeConverter.cpp strnormalize.cpp”
PHP_NEW_EXTENSION(ext_name, $CPPFILE, $ext_shared)

二、修改.h文件

这里指修改php_ext_name.h这个文件。

由于TSRM.h这个文件所包含的函数和类都是用纯C语言写的,故应该使用extern来说明如下:

extern “C” {
#ifdef ZTS
#include “TSRM.h”
#endif
}

如果php_ext_name.h文件或ext_name.cpp文件用到了C++中的一些容器或函数,则需要在头文件中包含相应的头文件。


三、修改.cpp文件

这里指修改ext_name.cpp这个文件

由于config.h、php.h、php.ini和ext/standard/info.h中包含的函数和类如TSRM.h一样,都是用纯C语言写的,所以都要用extern说明。

extern “C” {
#ifdef HAVE_CONFIG_H
#include “config.h”
#endif
#include “php.h”
#include “php_ini.h”
#include “ext/standard/info.h”
}


另外ZEND_GET_MODULE这个宏命令也需要特别声明。

#ifdef COMPILE_DL_EXT_NAME
BEGIN_EXTERN_C()
ZEND_GET_MODULE(ext_name)
END_EXTERN_C()
#endif

四、编译安装扩展库

#phpize

#./configure

#make

#make install


参考文章:http://www.blogjava.net/xiaomage234/archive/2009/08/31/293353.html




C++编写PHP扩展: 一个简单示例 在上面的代码中,我们定义了一个名为"sum"的函数,它接受两个整数作为参数,并返回它们的和。然后,我们定义了我们的扩展的函数列表,其中包含我们刚刚定义的"sum"函数。我们将创建一个名为"my_extension"的扩展,它将提供一个函数来计算两个整数的和。现在,让我们来测试一下我们的扩展。运行test.php文件,你将看到输出为30,这表明我们的扩展已经成功工作了!上面的头文件包含了必要的PHP头文件,并声明了我们的扩展的模块信息和版本号。首先,让我们创建一个目录来保存我们的扩展代码,并切换到该目录。 阅读详情

相关推荐

人工智能训练师三级考试题型全解析|190道真题样例+30天备考路线

人工智能训练师三级考试并不神秘:理论考190道选择题(刷题就能过),实操考代码+方案设计(练练就会)。核心是花时间——30天系统备考,足以从容通过。如果你想从零开始系统备考,覆盖所有考点和实操技能,欢迎查看我的专栏:📖《人工智能训练师三级·从零到拿证完全指南》80篇系统化内容,覆盖报名、备考、冲刺、拿证全流程六大模块知识点逐个击破,每个考点都讲透实操代码题手把手教学,附带完整参考代码高频考点速记 + 易错题精讲 + 3套模拟试卷30天备考计划 + 冲刺复习策略。

白话机器学习 5532

c 写php扩展,使用C/C++编写PHP Extension

和Python,JavaScript等高级语言一样,PHP也可以通过C/C++编写扩展功能。这里分享下如何构建一个简单的PHP扩展,以及如何调用第三方DLL库。使用Visual Studio 2012构建PHP扩展Windows PHP的安装包本身不包涵头文件,所以要构建PHP扩展,必须下载PHP的源码。在Windows上,要编译PHP,以及构建PHP扩展都必须使用对应的Visual Studio...

weixin_42465885的博客 493

使用C++11开发PHP7扩展

1. PHP 可以用 C++ 扩展实现多线程 2. PHP-X 支持 Windows 平台,可以开发Windows的PHP扩展 3. 程序中大量运算的逻辑可以改为 C++ 扩展实现 4. 使用 PHP-X 开发商业软件,避免源码泄漏

PHP开发C++扩展

摘要 有时候,单纯依靠 PHP “本身”是不行的。尽管普通用户很少遇到这种情况,但一些专业性的应用则经常需要将 PHP 的性能发挥到极致(这里的性能是指速度或功能)。由于受到 PHP 语言本身的限制,同时还可能不得不把庞大的库文件包含到每个脚本当中。因此,某些新功能并不是总能被顺利实现,所以我们必须另外寻找一些方法来克服 PHP 的这些缺点。 了解到了这一点,我们就到了应该接触一下 PHP

W1552332103的专栏 1万+

PHP-CPP项目:在C++扩展实现PHP类属性详解

PHP扩展开发中,PHP-CPP提供了一种优雅的方式来创建原生C++类并将其暴露给PHP。本文将深入探讨如何在PHP-CPP项目中实现PHP类的属性(properties),包括常规属性、静态属性、常量以及智能属性等高级用法。 ## 原生C++变量 vs PHP属性 在开始之前,我们需要理解一个重要的性能考量: **最佳实践建议**:对于纯C++内部使用的成员变量,应该直接使用C++原生类...

gitblog_01017的博客 1048

c++php 扩展

http://blog.sina.com.cn/s/blog_532f78a40100qqnr.html 此篇文章准备分2个部分来讲述:    第一部分主要详细讲述一下怎么构建一个完成的C++应用扩展模块;    第二部分主要讲述在PHP及Zend框架下怎么使用Zend API和C++语言来实现自己所要的功能以及项目的开发;     此篇文章所运用的环境在Linux2.4.21-4

loongwong2011的博客 2716

c++开发php扩展,C++实现PHP扩展

使用Ubuntu12.04开发环境 一、修改config文件 config.m4文件是编译基础中最核心的文件,这个文件主要用于autoconfi来产生configure配置文件,继而自动生成Makefile文件。 1. 生成扩展模块框架 #./ext_skel --extname=ext_name 2. 修改config.m4文件 这里有几使用Ubuntu12.04开发环境一、修改config文件...

weixin_29628479的博客 555

php extname shared,C++实现PHP扩展

使用Ubuntu12.04开发环境一、修改config文件config.m4文件是编译基础中最核心的文件,这个文件主要用于autoconfi来产生configure配置文件,继而自动生成Makefile文件。1. 生成扩展模块框架#./ext_skel --extname=ext_name2. 修改config.m4文件这里有几个重要的宏命令如下:dnl 是注释;PHP_ARG_WITH或者PH...

weixin_26858217的博客 203

Windows下编写php扩展(三)利用php-cpp在window上快速开发PHP扩展

引言 在前一篇文章《Windows下编写php扩展(二)将linux下的php-cpp项目移植到windows》说明了将php-cpp移植到windows的过程。 接下来谈一谈用php-cpp开发php扩展的过程,本次的实验平台是win10 企业版,visual C++ 2017 社区版。 基本工作内容 开发php扩展的工作区基本内容如下: phpcpp-dev\include 目录下存放要引用...

littlezhuhui的专栏 1384

linuxphp实现C/C++扩展编程

linuxphp实现C/C++扩展编程 摘自: www.chinaitlab.com  被阅读次数: 139 由 yangyi 于 2009-07-30 21:56:21 提供 - 某个功能被编译到so文件中,那么如何通过php来调用它?一个方法是写一个php模块(php extension),在php中调用该模块内的函

可克技术 641

将cpp改为cpp+cu_使用C ++和PHP-CPP开发PHP扩展:高级

将cpp改为cpp+cuIn my earlier articles, I have introduced the PHP-CPP lib to create an extension for PHP using C++ (first article and second article). In the latter, I demonstrated a bit of the OO side of...

culh2177的博客 507

cpp 面向对象小题目_用PHP-CPP开发PHP扩展:面向对象的代码

cpp 面向对象小题目In my Part 1 on building a PHP extension with PHP-CPP, we have seen some basics in using PHP-CPP to create our first skeleton PHP extension and covered some important terminologies. 在关于使用...

culi4814的博客 480

PHP扩展开发终极指南:Zephir与PHP-CPP完整教程

GitHub 加速计划的 awesome-php 项目是一个精心策划的 PHP 资源列表,包含了各种令人惊叹的 PHP 库、资源和实用工具。本教程将带你深入了解如何使用 Zephir 和 PHP-CPP 这两种强大的工具来开发高性能的 PHP 扩展,为你的 PHP 应用程序带来质的飞跃。 ## 为什么选择 Zephir 和 PHP-CPP 开发 PHP 扩展PHP 扩展是提升 PHP 应用

gitblog_00996的博客 411

PHP-CPP项目解析:用C++PHP打造高性能扩展

在Web开发与高性能计算场景中,PHP作为脚本语言常面临性能瓶颈,尤其在密集计算和底层交互时。通过开发PHP扩展,开发者能够将核心逻辑用C/C++实现,从而大幅提升执行效率。PHP-CPP作为一个开源C++库,提供了面向对象的API,极大简化了扩展开发流程,使开发者无需深入Zend引擎底层即可构建高性能模块。其技术价值在于平衡了开发效率与执行性能,适用于图像处理、科学计算、实时数据处理等对性能要求苛刻的应用场景。本文以数学计算扩展为例,详细解析了从环境配置、核心原理到实战编码的全过程,并重点探讨了内存管理与

weixin_32325225的博客 303

php相关的开发技术,PHP扩展开发教程1 - 相关开发技术对比及介绍

PHP扩展是高级PHP程序员必须了解的技能之一,对于一个初入门的PHP扩展开发者,怎么才能开发一个成熟的扩展,进入PHP开发的高级领域呢?本系列开发教程将手把手带您从入门进入高级阶段。本教程系列在linux下面开发(推荐使用centos),php版本用的是5.6,并假设您有一定的linux操作经验和c/c++基础。有问题需要沟通的朋友请加QQ技术交流群32550793和我沟通。开发php扩展有好几...

weixin_39722070的博客 159

php 无法实现c,linuxphp实现C/C++扩展编程_php

首先做一个简单的so文件:/*** hello.c* To compile, use following commands:* gcc -O -c -fPIC -o hello.o hello.c* gcc -shared -o libhello.so hello.o*/http://www.gaodaima.com/48482.htmllinuxphp实现C/C++扩展编程_phpin...

weixin_28999945的博客 115

php调用c++程序实现php功能扩展

通过php调用c++的程序来实现php的部分功能扩展,如php实现较为复杂,不妨用别的语言来实现,通过文件或别的东东来实现数据交互

zhang_ruiqiang的博客 4269

linux php c 扩展,linuxphp实现C/C++扩展编程

某个功能被编译到so文件中,那么如何通过php来调用它?一个方法是写一个php模块(php extension),在php中调用该模块内的函数,再通过该模块来调用so中的函数。下面做一个简单的例子,使用的操作系统是Fedora Core 6。首先做一个简单的so文件:/*** hello.c* To compile, use following commands:* gcc -O -c -fP...

weixin_39625975的博客 135

phpcpp拓展开发-安装和运行第一个拓展(一)

安装phpcpp 我们不赘述为什么试用phpcpp 进行php拓展库的开发,我们直接进入实践 下载并安装PHP-CPP 库 获取PHP-CPP 库代码 $ git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP.git 安装 切换到PHP-CPP 源代码目录,其中应该包含Makefile 文件,它是一个包含编译器设置和指令的文件,在该目录下运行make启动编译器并构建库 $ make make install 安装到系

tiway的博客 414

msvcr100.dll下载【32位+64位】

msvcr100.dll为Visual Studio 2010的一个动态链接库,如果某程序是用它开发出来的,那么该程序的运行就有可能需要此动态链接库,有些程序直接将其打包到了安装目录,并注册,就不会出现缺失的问题;但有些程序则默认系统中有此动态链接库,没有进行处理,那就会出现缺失的问题32位系统:复制X86文件夹下的DLL文件到C:\WINDOWS\system32目录下64位系统:复制X64文件夹下的DLL文件到C:\WINDOWS\system32目录下 复制X86文件夹下的DLL文件到C:\WINDOWS\syswow64目录下

上一篇: Linux系统下UDP发送和接收广播消息小例子
下一篇: Ubuntu程序自启动
奋斗的IT青年
博客等级 码龄13年 59粉丝 94原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值