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

使用C语言给php写扩展的更多相关文章

  1. JAVA语言之怎样写出高性能的Java代码?

    本文主要向大家介绍了JAVA语言之怎样写出高性能的 Java 代码?通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我 ...

  2. Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)

    我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等.强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Pyt ...

  3. c#写扩展方法

    学习MVC时,学会了写扩展方法,用起来很方便. 01 using System; 02 using System.Collections.Generic; 03 using System.Linq; ...

  4. 易语言调用csharp写的COM组件的程序在Win2008上奔溃的解决办法

    易语言调用csharp写的COM组件,除了要注册csharp写的dll之外(由于是.net代码,需要用.net自带的注册工具RegAsm.exe注册,具体注册方法为: C:\WINDOWS\Micro ...

  5. CAD在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据

    在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据.下面帮助的完整例子,在控件安装目录的 Sample\Ie\iedemo.htm 中. 主要用到函数说明: _DMxDrawX::InsertBlo ...

  6. CAD在网页绘一个直线,得到直线id,再调该得到直线对象,然写扩展数据

    IMxDrawDatabase::ObjectIdToObject 实体id返回实体对象. 参数 说明 [in] LONGLONG lId 实体id JS代码,中绘一个直线,得到直线id,再调该得到直 ...

  7. Notepad2(C语言+Windows消息写的,24592行代码)

    C语言+Windows消息写的,24592行代码 http://www.flos-freeware.ch/

  8. [转载] C语言细节,写的非常棒!

    这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结 ...

  9. 学了C语言,如何写个程序计算出每个月的第一个星期一对应的日期

    在前面,我们分别利用泰勒公式和C标准库中的mktime()函数推算了某个特定日期所对应的星期几,刚做完这些,就又遇到了一个与日期相关的新任务: 老板把每个月例会的时间定在了每个月的第一个星期一,他让我 ...

随机推荐

  1. 一步一步pwn路由器之radare2使用实战

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前文讲了一些 radare2 的特性相关的操作方法.本文以一个 c ...

  2. 构建微服务:快速搭建Spring Boot项目

    Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  3. 180415_判断闰年的思路及三种 java 实现

    世纪年:能整除 100 的年份 普通年:不能整除 100 的年份 闰年:一年有 366 天,二月有 29 天 平年:一年有 365 天,二月有 28 天 对于世纪年:能整除 400 为闰年,否则为平年 ...

  4. canvas验证码 - 随机字母数字

    基于canvas制作随机生成数字英文组合验证码效果,点击或刷新会自动重组.输入验证码提交验证效果代码. <div class="verification"> <i ...

  5. android 常用adb 及linux 命令

    一.ADB相关 adb shell:进入连接的USB调试模式设备shell命令行下 adb tcpip 5555:将USB连接的调试及的连接方式改为网络远程模式进行调试 这里端口为5555(adb 默 ...

  6. ARC中block块作为属性的使用笔记

    ARC中block块作为属性的使用笔记 block较难理解,根据在内存中的分布情况就分为3种类型,根据使用的情形又分为很多很多种.虽然用起来容易,但使用不当会造成内存泄露,虽然都是这么说,但你真的研究 ...

  7. RDMBorderedButton

    RDMBorderedButton https://github.com/reesemclean/RDMBorderedButton 效果: 源码: RDMBorderedButton.h + RDM ...

  8. 【数据结构】 顺序表查找(折半查找&&差值查找)

    #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 10 首先构造一个 ...

  9. jquery ztree的案例,附源代码

    播客:http://itindex.net/detail/46094-jquery-ztree-%E7%A8%8B%E5%BA%8F   源代码: http://download.csdn.net/d ...

  10. JS代码高亮编辑器 ace.js

    JS代码高亮编辑器 ace.js 字数254 阅读2 评论0 喜欢0 瞎扯 ace 是 js 实现的代码编辑器 编译打包之后的 ACE 代码 官网,未提供编译好的文件 ACE 拥有的特点 语法高亮超过 ...