Linux下php动态添加扩展
发布日期:2025-04-07 13:55:29 浏览次数:6 分类:精选文章

本文共 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

      结尾。

    上一篇:Linux下protobuf和 protobuf-c安装使用
    下一篇:linux下nodejs安装以及如何更新到最新的版本

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月23日 08时08分20秒