博客
关于我
Linux下php动态添加扩展
阅读量:792 次
发布时间:2023-02-02

本文共 1731 字,大约阅读时间需要 5 分钟。

如何将C函数作为PHP模块开发

  • PHP模块开发是将C扩展与PHP脚本集成的过程。要实现灰度算法在PHP中的调用,需遵循以下步骤。
  • 生成需要调用的so文件:

    1.1 Spearate gray.c使用gcc编译gray.c生成gray.o:

    gcc -O -c -fPIC -o gray.o gray.c

    1.2 Compile gray.o生成libgray.so:

    gcc -shared -o libgray.so gray.o

    注意:-fPIC使生成的动态库位置无关,可以在任何位置使用。

    1.3 Copy libgray.so到用途目录:

    cp libgray.so /usr/local/lib

    1.4 注册动态链接库:将库的路径添加到_ld.so.conf文件中:

    echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf

    运行:

    /sbin/ldconfig

    验证函数:

    编写并测试gray_test.c:

    #include 
    int main() { int a = 3, b = 4, c = 5; printf("r=%d g=%d b=%d -> gray=%d\n", a, b, c, RGB_TO_GRAY(a, b, c)); return 0;}gcc -o test test.c -lgray./test

    制作PHP模块:

    2.1 创建PHP扩展项目:

    cd $php-5.3.23/ext/./ext_skel --extname=gray

    修改config.m4:

    将注释从使用dnl注释替代:

    gedit gray/config.m4

    修改为:

    PHP_ARG_ENABLE(gray, 是否启用gray支持,    Make sure comment is aligned:    [ --enable-gray ] enable gray support)

    修改php_gray.h:

    PHP_FUNCTION(confirm_gray_compiled);改为PHP_FUNCTION(gray);

    编辑gray.c,修改函数入口:

    从:

    zend_function_entry php5cpp_functions[] = { /* -- */    PHP_FE(confirm_gray_compiled, NULL) /* For testing, remove later. */    { NULL, NULL, NULL }};

    改为:

    zend_function_entry php5cpp_functions[] = { /* -- */    PHP_FE(gray, NULL)    { NULL, NULL, NULL }};

    在gray.c末尾添加新函数:

    PHP_FUNCTION(gray) {    long int r, g, b;    long int result;    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll&", r, g, b) == FAILURE) {        return;    }    result = RGB_TO_GRAY(r, g, b);    RETURN_LONG(result);}
    1. Compile扩展:
    2. cd $php-5.3.23/ext/grayphp/bin/phpize./configure --with-php-config=$php/bin/php-configmake LDFLAGS=-lgraymake install

      配置php.ini:

      修改extension_dir和添加gray.so:

      gedit php.ini将extension_dir设置为$php/ext/,添加extension=gray.so

      测试:

      编写test.php:

      Apache服务器重启:

      apache2/bin/apachectl restart

      结尾。

    转载地址:http://ifzfk.baihongyu.com/

    你可能感兴趣的文章
    Linux 计划任务详解
    查看>>
    Linux 计划任务详解
    查看>>
    linux 让php支持mysql_转 linux下php扩展mysqli的支持
    查看>>
    Linux 设置/删除环境变量
    查看>>
    linux 访问mysql
    查看>>
    linux 读写权限
    查看>>
    linux 超好用的命令行工具
    查看>>
    Linux 跑机器脚本与工具详解
    查看>>
    Linux 软件 RAID 设置
    查看>>
    Linux 软件安装与卸载
    查看>>
    Linux 输入重定向和管道符号
    查看>>
    Linux 运维王者从不离手的10款工具,全用过会变成高手?
    查看>>
    linux 运行.sh 让其执行其中的Python文件
    查看>>
    Linux 运行SHELL报错“-BASH: ./TEST.SH: /BIN/BASH^M: BAD INTERPRETER: NO SUCH FILE OR DIRECTORY”
    查看>>
    Linux 这4个进程相关的命令,太好用!
    查看>>
    Linux 进程信号的基本概念、信号类型、信号处理方式、信号传递机制以及如何使用进程信号进行进程间通信、异常处理
    查看>>
    Linux 进程和系统监测
    查看>>
    Linux 进程管理及监控与性能评估
    查看>>
    Linux 进程管理详解
    查看>>
    Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知...
    查看>>