博客
关于我
Linux下php动态添加扩展
阅读量:791 次
发布时间: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下python找到自己编写的模块
    查看>>
    Linux下rar解压工具的安装使用
    查看>>
    Linux下Redis部署
    查看>>
    linux下rename用法--批量重命名
    查看>>
    Linux下Rootkit的另类检测
    查看>>
    Linux下samba服务搭建
    查看>>
    linux下sed命令用法
    查看>>
    linux下sort用法
    查看>>
    linux下subversion server安装手册
    查看>>
    linux下svn修改用户名和密码
    查看>>
    linux下svn命令使用大全
    查看>>
    Linux下tar bz gz等压缩包的压缩和解压【转自www.bitsCN.com】
    查看>>
    linux下tar、zip等压缩、解压命令
    查看>>
    linux下tar命令解压到指定的目录
    查看>>
    linux下tar打包与压缩
    查看>>
    Linux下Tomcat的启动、关闭、杀死进程
    查看>>
    Linux下Tomcat重新启动
    查看>>
    LInux下Ubuntu下查看端口占用及关闭
    查看>>
    Linux下Unicode的使用
    查看>>
    linux下uniq命令
    查看>>