文档章节

使用C语言给php写扩展

o
 osc_a22drz29
发布于 2019/03/25 17:44
字数 331
阅读 12
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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、生成扩展:

在extend_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表示扩展成功安装

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
使用纯Rust开发PHP扩展

背景 最近由于工作需要使用某个开源的PHP扩展,发现扩展并不成熟,在某些情况下会产生内存段错误使php-fpm退出,从而产生502错误。联想到PHP源码和PHP扩展都是用C语言写的,虽然C语言在性能和...

__JM_Joy__
2019/12/22
128
0
PHP7.4 全新扩展方式 FFI 详解

随着PHP7.4而来的有一个我认为非常有用的一个扩展:,引用一段PHP FFI RFC中的一段描述 For PHP, FFI opens a way to write PHP extensions and bindings to C libraries in pure PHP. 是的,...

osc_cqhvqcam
04/29
9
0
PHP FFI详解 - 一种全新的PHP扩展方式

https://www.laruence.com/2020/03/11/5475.html 本文地址: https://www.laruence.com/2020/03/11/5475.html 转载请注明出处 随着PHP7.4而来的有一个我认为非常有用的一个扩展:PHP FFI(Fore...

osc_tc2z9lbh
03/19
6
0
用Zephir编写PHP扩展

HHVM和Hack Facebook自己弄了一套HHVM虚拟机,和一个新语言Hack。HHVM的性能不错,像Wordpress,PHPMyAdmin这样的项目,运行在上面很流畅,但是有个问题很致命,如果你引入了第三方扩展,现有...

老查
2015/04/24
64
0
《PHP扩展及核心》

本文地址:http://www.cnblogs.com/aiweixiao/p/8202365.html 原文地址: 欢迎关注微信公众号 程序员的文娱情怀 一、主要内容: 1️⃣php扩展的概念和底层实现 2️⃣编写一个php扩展的步骤 ...

osc_97lc6mbg
2018/01/05
4
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式(4) 建造者模式

什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了...

zhixin9001
23分钟前
14
0
ArrayList源码分析 —— JDK8

ArrayList的特性 ArrayList内部使用数据作为存储结构,ArrayList可以理解为数组的扩展对象,封装了常用的和非常用的操作数组的方法。以及当数组长度不足以保存数组时,自动扩容数组,通常Arr...

XuePeng77
30分钟前
32
0
__slots__的用法? - Usage of __slots__?

问题: Python中__slots__的目的是什么-尤其是关于何时以及何时不使用它的目的? 解决方案: 参考一: https://stackoom.com/question/1ymu/slots-的用法 参考二: https://oldbug.net/q/1ym...

富含淀粉
41分钟前
17
0
Python分析42年高考数据,告诉你高考为什么这么难?

作者:徐麟 历年录取率 可能很多经历过高考的人都不知道高考的全称,高考实际上是普通高等学校招生全国统一考试的简称。从1977年国家恢复高考制度至今,高考经历了许多的改革,其中最为显著的...

爱码小哥
42分钟前
19
0
CKEditor 5 + SpringBoot实战(四):SpringBoot 实现文件上传

在本系列的文章中,我将介绍如何在Spring Boot Application中使用CKEditor编辑器。介绍的内容包括基本环境的搭建,文件上传,SpringData JPA数据持久化,CKEditor5的安装,CKEditor图片上传,...

树下魅狐
44分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部