利用php调用C语言 扩展函数

php调用c++程序 网络交互部分使用php,计算部分使用c++. 主要探索php和其它语言的交互问题。 一种是通过http调用,通过发送请求调用c/c++编写的fastcgi来实现,另外一种就是直接执行外部应用程序的方式,不过这种方式容易影响到系统安全。 首先编写用户输入程序 Use c++ add 阅读详情

第一步. 生成需要调用的so文件

1.  首先做一个简单的so文件:

/** * hello.c

* To compile, use following commands:

 *   gcc -O -c -fPIC -o hello.o hello.c

  *   gcc -shared -o libhello.so hello.o

*/

int hello_add(int a, int b)

{

    return a + b;

}

然后将它编译成.so文件并放到系统中:

$ gcc -O -c -fPIC -o hello.o hello.c                      // -fPIC:是指生成的动态库与位置无关

$ gcc -shared -o libhello.so hello.o                     // -shared:是指明生成动态链接库

$ su        // 切换成超级用户,此时,需要输入密码。

# cp libhello.so /usr/local/lib      // 把生成的链接库放到指定的地址

# echo /usr/local/lib > /etc/ld.so.conf.d/local.conf       //  把库地址写入到配置文件中

# /sbin/ldconfig                // 用此命令,使刚才写的配置文件生效

 

2. 写段小程序来验证其正确性:

/**

 * hellotest.c

 * To compile, use following commands:

*   gcc -o hellotest -lhello hellotest.c

*/

#include <stdio.h>

int main()

{

    int a = 3, b = 4;

    printf("%d + %d = %d", a, b, hello_add(a,b));

    return 0;

}

编译并执行:

$ gcc -o hellotest -lhello hellotest.c                // 编译测试文件,生成测试程序

$ ./hellotest           // 运行测试程序

 

第二步. 制作PHP模块(外部模块)

请确保你已安装 PHP及APACHE服务器。

$ cd php-5.2.3/ext

1. 然后通过下面的命令用ext_skel脚本建立一个名为 hello 的模块:

$ ./ext_skel --extname=hello

 

2. 执行该命令之后它会提示你应当用什么命令来编译模块,可惜那是将模块集成到php内部的编译方法。

如果要编译成可动态加载的 php_hello.so,方法要更为简单。

$ cd hello

 首先编辑 config.m4 文件,去掉第16行和第18行的注释(注释符号为 dnl 。)

16:  PHP_ARG_ENABLE(hello, whether to enable hello support,

17:  dnl Make sure that the comment is aligned:

18:  [  --enable-hello           Enable hello support])

 

3. 然后执行 phpize 程序,生成configure脚本:

$ phpize

 该程序在ubuntu的php5-dev包中

 

4. 打开 php_hello.h,在 PHP_FUNCTION(confirm_hello_compiled); 之下加入函数声明:

PHP_FUNCTION(confirm_hello_compiled);   /* For testing, remove later. */

PHP_FUNCTION(hello_add);

 

5. 打开 hello.c,在 PHP_FE(confirm_hello_compiled, NULL) 下方加入以下内容。

zend_function_entry hello_functions[] = {

    PHP_FE(confirm_hello_compiled,  NULL)       /* For testing, remove later. */

    PHP_FE(hello_add,   NULL)       /* For testing, remove later. */

    {NULL, NULL, NULL}  /* Must be the last line in hello_functions[] */};

    然后在 hello.c 的最末尾书写hello_add函数的内容: 

PHP_FUNCTION(hello_add)

{

    long int a, b;

    long int result;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) {

        return;

    }

    result = hello_add(a, b);

    RETURN_LONG(result);}保存退出,编译并安装:

 

6. $ ./configure

$ make LDFLAGS=-lhello

$ sudo make install

Installing shared extensions:     /usr/lib/php5/20060613+lfs/$ su# cp modules/hello.so /usr/lib/php/modules

luther@gliethttp:~$ sudo vim /etc/php5/apache2/php.ini;

enable_dl = Off;允许dl()动态加载so扩展功能enable_dl = On

luther@gliethttp:~$ sudo service apache2 reload    然后在 /var/www/html 下建立一个 hello.php 文件,内容如下:

<?php

    dl("hello.so");

    echo hello_add(3, 4);

?>

然后在浏览器中打开hello.php文件,如果显示7,则说明函数调用成功了。

第三步. 制作PHP模块(内部模块)

另外可以在apache重启的时候让我们的so库直接动态编译进php5,就像linux的insmod hello.ko模块一样,不用dl加载也不用重新编译php,就可以直接使用so的函数了,步骤如下:

luther@gliethttp:~$ sudo vim /etc/php5/apache2/php.ini
enable_dl = Off
extension=hello.so
luther@gliethttp:~$ sudo service apache2 restart

不能reload而必须restart apache,这样so就像insmod hello.ko一样被融到了php5内核,然后代码就可以忽略掉dl("hello.so");了,

[注意,这种方式只适合hello.so库内所有功能代码已经全部调试ok,如果还处在调试期间,那么需要采用上面的dl强制加载的方式]

代码如下:

<?php

    echo hello_add(3, 4);

?>,

      但是该功能不太适合调试,因为每次修改hello.so中代码的话,都需要让service apache restart重启才能让php5内核再次加载新的hello.so扩展.可以这样定义hello.so的实现,这样每次执行.php网页,都会在 /var/www/下建立一个文件夹,所以php扩展实现了

 

本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2010/0521/22866.php



一,搭建php环境
下载php 5.2.6 源码 并解压
编译安装,搭建php环境

二,创建扩展项目
进入源码目录
cd php5.2.6/ext/
./ext_skel --extname=my_ext
创建名字为my_ext的项目,最终会生成my_ext.so
三,更改配置和程序
$ vi ext/my_ext/config.m4
根据你自己的选择将
dnl PHP_ARG_WITH(my_ext, for my_ext support,
dnl Make sure that the comment is aligned:
dnl [ --with-my_ext Include my_ext support])
修改成
PHP_ARG_WITH(my_ext, for my_ext support,
Make sure that the comment is aligned:
[ --with-my_ext Include my_ext support])
或者将
dnl PHP_ARG_ENABLE(my_ext, whether to enable my_ext support,
dnl Make sure that the comment is aligned:
dnl [ --enable-my_ext Enable my_ext support])
修改成
PHP_ARG_ENABLE(my_ext, whether to enable my_ext support,
Make sure that the comment is aligned:
[ --enable-my_ext Enable my_ext support])
$ vi ext/my_ext/php_my_ext.h
将
PHP_FUNCTION(confirm_my_ext_compiled); /* For testing, remove later. */
更改为
PHP_FUNCTION(say_hello);

$ vi ext/my_ext/my_ext.c
将
zend_function_entry php5cpp_functions[] = {
PHP_FE(confirm_my_ext_compiled, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in php5cpp_functions[] */
};
更改为
zend_function_entry php5cpp_functions[] = {
PHP_FE(say_hello, NULL)
{NULL, NULL, NULL} /* Must be the last line in php5cpp_functions[] */
};
在最后添加:
PHP_FUNCTION(say_hello)
{
zend_printf("hello world/n");
}
四,编译
$ cd my_ext
$ /usr/local/php/bin/phpize
ps: 如果出现:Cannot find autoconf.……的错误信息,则需要安装 autoconf (安装过程略)
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make
这时会编译出 my_ext/modules/my_ext.so
五,配置php.ini
将my_ext.so放入/usr/local/php/ext/目录
$ vi php.ini

修改添加如下:
extension_dir = '/usr/local/php/ext/'
extension=my_ext.so
六,测试
$ vi test.php
<?php
say_hello();
?>
$ /usr/local/php/bin/php test.php
hello world.
则大功告成

下面我来讲讲如何作一个php的扩展
首先要有一个搭建好的php环境
我把php的安装在了/usr/local/php当然也通过
php
的一个配置php.ini的路径但是要注意了
用这种方法安装的php扩展不能实现
我们在php安装以后的/usr/local/php/bin目录
找到这个文件phpize稍后我们将用到他
他就是个shell脚本你可以用vi phpize来查看他的内容
但是你要注意了这个脚本不是在哪里都可以应用的
[root@ns root]# phpize
Cannot find config.m4.
Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module

[root@ns root]# phpize
Cannot find config.m4.
Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module


你会看到这两种结果实际上你查看了这个脚本
很轻松的就会发现是怎么来处理的
你的模扩展的时候最好
放在/usr/local/src/php-4.3.5/ext下
来执行他你在这里也可以这样/usr/local/php/bin/phpize来执行也可以
phpize
来执行

我们在/usr/local/src/php-4.3.5/ext下找到这个工具
来建立一个php扩展的一个框架
[root@ns ext]#cd /usr/local/src/php-4.3.5/ext/
[root@ns ext]# ./ext_skel --extname=jinzhesheng_module
Creating directory jinzhesheng_module
Creating basic files: config.m4 .cvsignore jinzhesheng_module.c php_jinzhesheng_module.h CREDITS EXPERIMENTAL tests/001.phpt jinzhesheng_module.php [done].

To use your new extension, you will have to execute the following steps:

1.  $ cd ..
2.  $ vi ext/jinzhesheng_module/config.m4
3.  $ ./buildconf
4.  $ ./configure --[with|enable]-jinzhesheng_module
5.  $ make
6.  $ ./php -f ext/jinzhesheng_module/jinzhesheng_module.php
7.  $ vi ext/jinzhesheng_module/jinzhesheng_module.c
8.  $ make
执行了这个步骤以后你会看到这样的结果
Repeat steps 3-6 until you are satisfied with ext/jinzhesheng_module/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.
这样以后我们会在这个目录下生成一个目录叫jinzhesheng_module
进入这里面我们看看
[root@ns ext]# cd jinzhesheng_module/
[root@ns jinzhesheng_module]# ls
config.m4  EXPERIMENTAL          jinzhesheng_module.php    tests
CREDITS    jinzhesheng_module.c  php_jinzhesheng_module.h

然后我们要修改文件顺序是
configue.m4
jinzhesheng_module.c
php_jinzhesheng_module.h

使用文本编辑器打开 config.m4 文件,文件内容大致如下:
dnl $Id$d
dnl config.m4 for extension my_module
dnl don't forget to call PHP_EXTENSION(my_module)
dnl Comments in this file start with the string 'dnl'.
dnl Remove where necessary. This file will not work
dnl without editing.
dnl If your extension references something external, use with:

dnl PHP_ARG_WITH(my_module, for my_module support,

dnl Make sure that the comment is aligned:

dnl [  --with-my_module             Include my_module support])

dnl Otherwise use enable:

dnl PHP_ARG_ENABLE(my_module, whether to enable my_module support,

dnl Make sure that the comment is aligned:

dnl [  --enable-my_module           Enable my_module support])

if test "$PHP_MY_MODULE" != "no"; then

  dnl If you will not be testing anything external, like existence of

  dnl headers, libraries or functions in them, just uncomment the

  dnl following line and you are ready to go.
  dnl Write more examples of tests here...

  PHP_EXTENSION(my_module, $ext_shared)

Fi
根据你自己的选择将

dnl PHP_ARG_WITH(my_module, for my_module support,

dnl Make sure that the comment is aligned:

dnl [  --with-my_module             Include my_module support])

修改成

PHP_ARG_WITH(my_module, for my_module support,

Make sure that the comment is aligned:

[  --with-my_module             Include my_module support])

或者将

dnl PHP_ARG_ENABLE(my_module, whether to enable my_module support,

dnl Make sure that the comment is aligned:

dnl [  --enable-my_module           Enable my_module support])

修改成

PHP_ARG_ENABLE(my_module, whether to enable my_module support,

Make sure that the comment is aligned:

[  --enable-my_module           Enable my_module support])
我这里用了后者
然后保存退出
然后在编辑
Vi my_module.c
将文件其中的下列代码进行修改

/* Every user visible function must have an entry in my_module_functions[].

*/
function_entry my_module_functions[] = {

        PHP_FE(say_hello,       NULL)  /* ?添加着一行代码 */

        PHP_FE(confirm_my_module_compiled,      NULL) /* For testing, remove later. */

        {NULL, NULL, NULL}      /* Must be the last line in my_module_functions[] */

};
在文件的最后添加下列代码
PHP_FUNCTION(say_hello)
{

        zend_printf("hello world/n");

}
保存文件退出

然后我们就可以在这个目录下使用上面的命令了
/usr/local/php/bin/phpize
执行以后会看到下面的
[root@ns jinzhesheng_module]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20020918
Zend Module Api No:      20020429
Zend Extension Api No:   20050606
[root@ns jinzhesheng_module]#
然后执行./configure --enable-jinzhesheng_module --with-apxs=/usr/local/apache/bin/apxs --with-php-config=/usr/local/php/bin/php-config
我们在安装以后的php的bin目录下的可以找到这个文件的
php-config
和phpize
这一步骤一定要注意你的apache的apxs放在哪里了
然后执行make
你会看到出现错误了你重新定义了函数我们前面的
这个你在回头改一下这个文件把原来的函数删除掉在生成的文件里面会有同样的函数
你在加入你的代码
就可以通过了
这个时候会在当前的目录下生成一个目录叫modules他的下面就放着你要的
jinzhesheng_module.so
文件
cp modules/jinzhesheng_module.so /usr/local/php/ext/
这里需要你先设置你的php的扩展目录的在
在php.ini里面
通过extension_dir
最后一不是你在php.ini文件中打开这个扩展
extension=jinzhesheng_module.so
然后
重新起动apache
用phpinfo来察看一下ok了

php调用c语言编写的so动态库 PHP除了使用扩展库的方式调用c函数,还可以通过socket通信的方式。这里介绍前者。 第一步: 环境搭建 1. 先看本机是否已经安装了较低版本的php    #find /usr -name "php"    或者rpm -aq | grep php    如果存在,就使用rpm命令等方式卸掉 2. php源码安装,configure的参数如下 #./configure  --p 阅读详情

相关推荐

linux中php调用so

NULL 博文链接:https://jinhailion.iteye.com/blog/2313440

php引用 加载动态库(.so) 文件

我们在开发php的时候可能会遇到调用so的问题,本篇介绍如何编写自己的动态链接库提供给php使用。 创建一个 .so 文件 1. 创建hello.c int hello_add(int a, int b) { return a + b; } 2. 编译 $ gcc -O -c -fPIC -o hello.o hello.c $ gcc -shared -o libhello.so hello.o $ su # echo /usr/local/lib > /etc/ld.so.

啊渊的专栏 3583

PHP中调用C/C++制作的动态链接库的教程

一般而言,php速度已经比较快,但是,对于一些较高级开发者而言,如果想要追求更快的速度,那毫无疑问可以通过自己写c代码,并编译为动态链接库(常为.so文件),然后php通过创建一个新的扩展(extension),并在扩展里调用该.so文件,同时对外暴露出php函数接口。 在实际使用中,只要调用该函数接口,即可使用底层更快速的c函数服务。 一、动态链接库(shared) 动态链接库的文件名后缀通常是 “.so”。在Windows系统中,其文件名后缀是”.dll”。 程序如果是和动态连接库进行链接(link),程序运行时需要能够找到相应的动态链接库文件。 使用动态链接库存编译的程序在运行时要求用户

PHP调用C语言实现接口方法

环境准备 环境: CentOS Linux release 7.3.1611 (Core) PHP 5.4.16 安装php、查看php版本 # yum install php php-devel # php -v so 动态库封装 [root@localhost hello]# cat hello.c #include <stdio.h> int hello_add (int a, int b) { return a+b; } 生成动态库: # gcc -fPI.

huang_1988的博客 2926

SAP中错记虚拟利润中心的调整,冲销处理实例

我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 1795

Vivado 2021.1 实战:手把手教你用IEEE1735 V2加密你的Verilog源码(附完整TCL命令)

本文详细介绍了在Vivado 2021.1中使用IEEE1735 V2标准加密Verilog源码的全流程,包括许可证申请、密钥文件配置、TCL命令执行及加密后验证。通过实战步骤和完整TCL命令,帮助开发者有效保护FPGA设计知识产权,确保核心算法安全。

weixin_42706667的博客 191

利用php调用C语言hello.so库文件中的php扩展函数代码

某个功能被编译到so文件中,那么如何通过php来调用它?一个方法是写一个php模块(php extension),在php中调用该模块内的函数,再通过该模块来调用so中的函数。下面做一个简单的例子,使用的操作系统是Fedora Core 6。<br />某个功能被编译到so文件中,那么如何通过php来调用它?一个方法是写一个php模块(php extension),在php中调用该模块内的函数,再通过该模块来调用so中的函数。下面做一个简单的例子,使用的操作系统是Fedora Core 6。<br />首先

2292

DFT知识点扫盲——DFT scan chain

实际在项目中synccell一般直接上ULVT,既然是SDF,就是带Scan接口的DFF,SN (set negtive)是低置位,RP(reset positive)是高复位,既没有SN也没有RP的就是无复位寄存器。1:定义:满足可测试性设计(DFT),将设计中所有的触发器连接到一条或者若干条链上,称为scan chain,将一个复杂的时序电路转换为简单的组合电路进行测试,这一步是在逻辑综合(DC)中实现。当SE=1当SI=1时,电路进入scan状态,当SI=0时,电路工作在normal状态。

笨蛋大乌龟的博客 4935

PHP中调用isleap函数,如何在PHP中调用C的函数

FFI提供了高级语言直接的互相调用,而对于PHP来说,FFI让我们可以方便的调用C语言写的各种库。其实现有大量的PHP扩展是对一些已有的C库的包装,比如常用的mysqli, curl, gettext等,PECL中也有大量的类似扩展。传统的方式,当我们需要用一些已有的C语言的库的能力的时候,我们需要用C语言写wrapper,把他们包装成扩展,这个过程中就需要大家去学习PHP的扩展怎么写,当然现在也...

weixin_35144564的博客 356

如何在iPhone上本地运行SmolVLM?5亿参数模型实战指南(附Swift代码)

本文详细介绍了如何在iPhone上本地部署和运行轻量高效的SmolVLM多模态模型。通过实战指南,分享了使用Swift和MLX框架进行环境配置、模型加载、内存优化以及实现实时图像分析与文本生成的完整流程,帮助开发者在移动端高效运行AI视觉语言模型。

echo99的专栏 654

TMS320F28377D的sys/bios双核工程配置详解——从零搭建到RAM优化

本文详细解析了TMS320F28377D双核系统在sys/bios环境下的工程配置与RAM优化策略。从开发环境搭建、SYS/BIOS工程创建到双核CMD文件配置,提供了实战技巧和常见问题解决方案,帮助开发者高效实现电力电子控制系统中的双核协作与性能优化。

weixin_28292761的博客 600

php7 zval ptr dtor,第十五节、回调PHP函数与开发一个并行扩展

## 起步很多时候,需要把控制权限交给用户,或者在扩展里完成某件事后去回调用户的方法。在PHP扩展里是通过 `call_user_function_ex` 函数来调用用户空间的函数的。## 定义它的定义在 [Zend/zend_API.h ](https://github.com/php/php-src/blob/master/Zend/zend_API.h):```c#define call_u...

weixin_39608134的博客 193

prometheus 从入门到精通(史上最全)

Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。原文链接:https://blog.youkuaiyun.com/qq_45277554/article/details/130917620时间序列数据。

流水_鱼鱼的博客 1万+

PHP7扩展开发(五):回调php函数与开发一个并行扩展

起步 很多时候,需要把控制权限交给用户,或者在扩展里完成某件事后去回调用户的方法。 在PHP扩展里是通过 call_user_function_ex 函数来调用用户空间的函数的。 定义 它的定义在 Zend/zend_API.h : #define call_user_function_ex(function_table, object,...

weixin_34419321的博客 242

HMC5883L磁力计驱动开发:I²C通信、校准与FreeRTOS集成

磁力计是惯性导航与电子罗盘系统的核心传感器,其输出原始磁场数据需经精确采集、单位换算与误差补偿才能用于姿态解算。基于各向异性磁阻(AMR)原理的三轴磁力计,如HMC5883L,依赖稳定I²C通信获取12位有符号磁场采样值,并通过增益配置、硬软铁校准及温度补偿提升物理量精度。在嵌入式实时系统中,驱动层须保障数据的时间一致性与抗干扰鲁棒性,避免总线挂死、字节错位或量程误配等典型问题。本文围绕HMC5883L这一广泛使用的停产但仍在产线服役的磁传感器,详解寄存器配置、定点单位转换、八方位校准算法及FreeRTOS

weixin_42594427的博客 145

Python爬虫实战:高德地图POI信息爬取(餐馆/加油站等),附选址分析技巧

高德API配置AMAP_KEY = "你的高德API Key" # 替换成自己的Key# 爬取参数CITY = "成都" # 城市DISTRICTS = ["锦江区"] # 区域,可添加多个(比如["锦江区", "武侯区"])KEYWORDS_LIST = ["川菜馆", "加油站"] # 要爬取的POI类型TYPES = {"川菜馆": "050101", # 餐饮服务→中餐→川菜馆(高德POI分类编码)"加油站": "110100" # 交通设施→加油站。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2469

开发php扩展厉害吗,原来开发PHP扩展可以如此简单

做为以为PHP的忠实粉丝,一直想开发PHP的C扩展,但是由于笔者C语言不过关,所以就一直搁置了。后来无意间发现了zephir语言,可以轻松的开发PHP扩展,于是花了两天时间,做了一个简单的集成环境,这是第一个版本,目前只可以正常编译扩展。 首先启动Z4P。目前有个已知的BUG就是,创建工程的时候,工程目录下部建议由其他文件。选择new project 选择工程目录,然后输入工程名称。 当然,使...

weixin_34118593的博客 89

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

finfoopen需要什么扩展 php_PHP7.4 全新扩展方式 FFI 详解

随着PHP7.4而来的有一个我认为非常有用的一个扩展:PHP FFI(Foreign Function interface),引用一段PHP FFI RFC中的一段描述官方群点击此处。For PHP, FFI opens a way to write PHP extensions and bindings to C libraries in pure PHP.是的,FFI提供了高级语言直接的互相调...

weixin_36393239的博客 206

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PHP竟能开发苹果系统?这操作太疯狂

最近有个朋友神秘兮兮地问我:老哥,听说你用PHP开发了个苹果系统?我差点把嘴里的泡面喷出来。这年头,用PHP写操作系统?怕不是想让我去ICU写代码?不过仔细想想,这事还真有点意思。先说说这个疯狂想法的来源。那天我在调试一个PHP的CLI应用,突然发现PHP7

grthgSyp的博客 568

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

利用php调用C语言 扩展PHP的功能

利用php调用C语言 扩展函数   第一步. 生成需要调用的so文件 1.  首先做一个简单的so文件: /** * hello.c * To compile, use following commands:  *   gcc -O -c -fPIC -o hello.o hello.c   *   gcc -shared -o libhello.so h

可克技术 1万+

PHP7.4 FFI 扩展安全问题

PHP 7.4 FFI扩展 bypass disable_function&[RCTF] nextphp&geek2020 FighterFightsInvincibly

weixin_63231007的博客 2610

【PHP扩展开发必备】在PHP扩展中通过C语言调用PHP函数与方法

这篇文章其实早就构思好了,一直未落于笔下,今天周天,想着不能再托了。 在扩展中调用PHP函数是一件很繁琐的事情,这里给大家带来一个现成的函数,可以极大的方便大家在扩展中调用php函数与方法。 函数原型:int walu_call_user_function(zval** retval, zval* obj, char* function_name, char* paras, …);

WEB开发游乐场与失落园 1210

让PHP能够调用C的函数-FFI扩展

让PHP能够调用C的函数-FFI扩展在大型公司中,一般会有很多编程语言的配合。比如说让 Java 来做微服务层,用 C++ 来进行底层运算,用 PHP 来做中间层,最后使用 JS 展现效...

硬核项目经理 624

【PHP开发900个实用技巧】514.FFI扩展:PHP调用C语言库的无桥接方案

PHP的FFI(Foreign Function Interface)扩展为开发者提供了一种直接调用C语言库函数的方式,极大地提升了PHP的性能和灵活性。本文从FFI的初体验、实战案例、安全陷阱、性能优化和横向对比五个方面,全面解析了FFI的使用场景及其对PHP开发的影响。 ### 1. FFI扩展初体验:DLL/so加载初战 FFI允许PHP直接加载和调用C语言库中的函数,无需编写PHP扩展。例如: ```php $ffi = FFI::cdef( // 声明C函数签名 "

707
上一篇: php中调用so文件的例子
下一篇: Windows下写PHP的C扩展
hn3e21
博客等级 码龄17年 9粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值