linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux基础建设 >

使用C语言给PHP写扩展

时间:2019-04-16  来源:未知  作者:admin666

1、在php源码路径的ext文件夹下,新建一个extend_test.def文件,编辑文件内容为

string my_test_function(string str,int n)

2、在当前目录执行./ext_skel --extname=extend_test --proto=extend_test.def 

其中,extname是扩展的名,proto是刚创建的文件,也可以用全路径

3、在当前目录下会生成extend_test文件夹,编辑extend_test文件夹下的config.m4

去掉一下三行的dnl的注释

PHP_ARG_ENABLE(extend_test, whether to enable extend_test support,
Make sure that the comment is aligned:
[  --enable-extend_test          Enable extend_test support])

4、编辑extend_test文件夹下的extend_test.c文件

找到以下方法并修改

PHP_FUNCTION(my_test_function)
{
    char *str = NULL;
    int argc = ZEND_NUM_ARGS();
    size_t str_len;
    zend_long n;
    char *result;
    char *ptr;
    zend_long result_length;

    if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
        return;
    result_length = str_len * n;
    result = (char *) emalloc(result_length + 1);
    ptr = result;
    while (n--) {
        memcpy(ptr, str, str_len);
        ptr += str_len;
    }
    *ptr = '\0';
    RETURN_STRINGL(result, result_length);
}

5、生成扩展:

在ext幸运大轮盘end_test文件夹下,运行/home/php/bin/phpize(实际为phpize所在路径)

然后运行./configure --with-php-config=/home/php/bin/php-config(实际为php-config所在路径)

6、编译安装

make           

make install

7、执行完后会显示扩展安装到了哪个路径下

然后修改php.ini增加扩展信息

extension=extend_test.so

8、测试扩展是否可用

新建test.php文件并将内容编辑为

<?php

echo my_test_function('a',5);

保存后用php运行,显示出aaaaa表示扩展成功安装

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

友情链接
  • PostgreSQL辟谣存在任意代码执行漏洞:消息不实
  • Firefox beta开始原生支持Windows 10 ARM64
  • fork()成为负担,需要淘汰
  • Ruby 2.3已结束支持,不再发布版本补丁
  • 优麒麟19.04即将发布,华为、阿里云、重大、360四大境像站鼎力支
  • Fedora提出统一流程,弃用上千Python 2软件包更可控
  • Edge on Linux?微软:会有的,但不是现在
  • Mozilla准备让“合格” Linux用户测试WebRender
  • Chrome不想让HTTPS网站通过HTTP下载文件
  • 2019开发者调查:Python或成赢家,Java最不赚钱?
  • 与Red Hat联手,Fedora要支持ARM笔记本
  • Mozilla宣布即将推出Firefox推荐扩展程序计划
  • 新版Chrome等主流浏览器将不再允许关闭点击跟踪
  • WireGuard 0.0.20190406最新快照发布,提供FreeBSD补丁和其他调
  • KDE Plasma 5.16 与 KDE Frameworks 5.57 每周功能总结
  • GIMP 2.10.10 发布,小功能添加和其他改进
  • 到2019年底,LVFS可能会托管1万多个固件文件
  • Visual Studio 2019 发布,带来Live Share 与 IntelliCode
  • Gitpod
  • 关注2019年最佳职位
  • GNU的GasU获得了对Intel BFloat16的支持
  • SuperTuxKart 0.10 RC1 发布,支持局域网/互联网多人游戏
  • Godot 3.2为其2D引擎获得伪3D支持
  • ConnMan 1.37 发布,作为Linux网络连将近一年的第一次更新
  • GitHub有超过3000个提到Vulkan的项目,D3D12有100~200个
  • Ant Design 3.16.2发布,企业级UI设计语言
  • TIOBE 2019年4月编程语言排行榜:C++重回前三名
  • Linux Kernel 5.1 RC3 发布,看起来很不错
  • 英特尔的IWD Linux无线守护进程继续提升新功能
  • 数据库技术 第485页
  • 改进的Spectre/Meltdown开关最终可能会进入Linux内核
  • 关于 Oracle redo与undo 的认识
  • Zabbix 4.2 发布,现代监控系统
  • Oracle DataGuard 报密码文件错误排查
  • Wine 4.6支持共享Wine
  • Facebook为Goya AI加速器开发Glow编译器后端
  • 体彩11选5走势图
  • 新濠博亚
  • 体彩排列3字谜
  • 德州扑克技巧
  • 中国足球内幕
  • 欧博娱乐
  • pk10改20分钟一期