php调用c 代码怎么写

fiy 其他 96

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在PHP中调用C代码可以使用扩展来实现。下面是一种常用的方法:

    1. 首先,需要编写一个C函数,供PHP调用。C函数可以是一个独立的源文件,也可以是一个C源码文件中的一个函数。例如,我们编写一个名为`hello`的C函数,该函数用于打印”Hello, World!”。示例代码如下:

    “`c
    #include
    #include

    PHP_FUNCTION(hello)
    {
    php_printf(“Hello, World!\n”);
    }
    “`

    2. 将C代码编译为可执行文件或库文件。可以使用gcc等工具进行编译。示例代码如下:

    “`
    gcc -shared -o hello.so hello.c
    “`

    3. 创建一个PHP扩展源代码文件,用于将C函数包装为PHP函数。示例代码如下:

    “`c
    #include

    extern zend_module_entry hello_module_entry;
    #define phpext_hello_ptr &hello_module_entry

    PHP_FUNCTION(hello);

    // 定义扩展信息
    zend_module_entry hello_module_entry = {
    STANDARD_MODULE_HEADER,
    “hello”,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    PHP_MINFO(hello),
    PHP_HELLO_VERSION,
    STANDARD_MODULE_PROPERTIES
    };

    ZEND_GET_MODULE(hello)

    // 注册函数
    const zend_function_entry hello_functions[] = {
    PHP_FE(hello, NULL)
    PHP_FE_END
    };

    // 模块初始化
    PHP_MINFO_FUNCTION(hello)
    {
    php_info_print_table_start();
    php_info_print_table_row(2, “Hello support”, “enabled”);
    php_info_print_table_end();
    }

    // 定义 hello 函数代码
    PHP_FUNCTION(hello)
    {
    hello();
    }

    // 初始化扩展
    PHP_MINIT_FUNCTION(hello)
    {
    return SUCCESS;
    }

    // 注册扩展
    PHP_RINIT_FUNCTION(hello)
    {
    #if defined(COMPILE_DL_HELLO) && defined(ZTS)
    ZEND_TSRMLS_CACHE_UPDATE();
    #endif

    return SUCCESS;
    }

    // 释放扩展资源
    PHP_MSHUTDOWN_FUNCTION(hello)
    {
    return SUCCESS;
    }

    // 注册扩展信息
    zend_module_entry hello_module_entry = {
    STANDARD_MODULE_HEADER,
    “hello”,
    hello_functions,
    PHP_MINIT(hello),
    PHP_MSHUTDOWN(hello),
    PHP_RINIT(hello),
    NULL,
    PHP_MINFO(hello),
    PHP_HELLO_VERSION,
    STANDARD_MODULE_PROPERTIES
    };
    “`

    4. 编译扩展源代码为扩展。示例如下:

    “`
    phpize
    ./configure –with-php-config=YOUR_PHP_BIN/php-config
    make
    sudo make install
    “`

    注意替换`YOUR_PHP_BIN`为你的PHP二进制文件所在路径。

    5. 在PHP中调用C代码。在使用该扩展的PHP文件中,可以直接使用`hello()`函数来调用C代码打印”Hello, World!”。示例代码如下:

    “`php

    “`

    该方法可以实现PHP与C之间的简单交互。当然,在实际项目中,可能需要更复杂的调用和数据传递方式。在这种情况下,可以通过扩展的方式来实现更复杂的功能。同时,还可以使用FFI功能来直接调用C函数,而不需要编写PHP扩展。具体的实现方法根据具体需求而定。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    要在PHP中调用C代码,可以使用PHP的FFI(Foreign Function Interface)扩展或者通过执行外部命令的方式。

    1. 使用FFI扩展:
    FFI是PHP 7.4及以上版本的一个内置扩展,它提供了与C代码交互的功能。可以使用FFI扩展将C代码编译成动态链接库(.so或.dll文件),然后在PHP中使用FFI扩展加载并调用这个动态链接库。
    以下是一个简单的使用FFI扩展调用C代码的示例:

    “`c
    // math.c
    int add(int a, int b) {
    return a + b;
    }
    “`

    “`php
    // test.php
    add(2, 3); // 输出 5
    ?>
    “`

    2. 执行外部命令:
    如果无法使用FFI扩展,也可以通过执行外部命令的方式间接调用C代码。可以使用PHP的exec()函数或者shell_exec()函数来执行编译好的C代码的可执行文件,并通过命令行参数或标准输入输出与C代码进行交互。
    以下是一个简单的使用exec()函数调用C代码的示例:

    “`c
    // math.c
    #include

    int add(int a, int b) {
    return a + b;
    }

    int main() {
    int a, b;
    scanf(“%d %d”, &a, &b);
    printf(“%d\n”, add(a, b));
    }
    “`

    “`php
    // test.php

    “`

    以上是两种常见的在PHP中调用C代码的方法。根据实际情况选择合适的方法进行调用。使用FFI扩展可以直接在PHP脚本中调用C代码函数,执行外部命令则需要将C代码编译成可执行文件,并通过命令行参数或标准输入输出与C代码进行交互。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在php中调用C代码可以通过扩展或者系统调用的方式来实现。下面分别介绍这两种方法的操作流程。

    一、通过扩展调用C代码

    1. 创建扩展代码

    首先,我们需要编写一个C源文件来实现所需的功能。假设我们已经编写好了一个C文件,命名为`example.c`,我们需要创建一个扩展来调用它。

    2. 编写扩展入口函数

    在创建扩展之前,我们需要编写一个入口函数,这个函数将会被PHP调用。该函数的命名方式是`zif_`+函数名,比如我们的C函数名是`exampleFunction`,那么我们的入口函数名就是`zif_exampleFunction`。

    3. 编写扩展的配置文件

    在创建扩展之前,我们还需要编写一个配置文件来定义扩展的信息。比如我们的扩展名是`example`,那么我们需要创建一个`example.ini`文件,来指定扩展的名字和路径。

    4. 编译并安装扩展

    在完成上述步骤之后,我们可以将扩展编译成动态链接库文件,供PHP调用。具体的编译步骤因操作系统而异,这里以Linux系统为例,使用以下命令编译扩展:

    “`
    phpize
    ./configure –with-php-config=/path/to/php-config
    make
    make install
    “`

    5. 在PHP中调用C函数

    在安装完成扩展后,我们就可以在PHP代码中调用我们的C函数了。首先需要使用`dl`函数动态加载扩展:

    “`
    if (!extension_loaded(‘example’)) {
    dl(‘example.so’);
    }
    “`

    然后可以直接调用C函数:

    “`
    exampleFunction($param1, $param2);
    “`

    二、通过系统调用调用C代码

    另一种调用C代码的方法是通过系统调用的方式。这种方式适用于调用已经编译好的可执行文件,或者通过命令行参数传递数据。下面是操作流程:

    1. 将C代码编译成可执行文件

    首先,我们需要将C代码编译成可执行文件。使用以下命令将C文件编译成可执行文件:

    “`
    gcc example.c -o example
    “`

    2. 在PHP中调用系统命令

    在PHP中可以通过`exec`函数或者`shell_exec`函数来调用系统命令。比如我们要调用`example`这个可执行文件,可以使用以下代码:

    “`
    $result = exec(‘./example param1 param2’);
    “`

    这样,PHP会执行该命令,并将命令的输出赋值给`$result`变量。

    总结:

    通过扩展调用C代码是更高效、更方便的方式,但需要对C语言和PHP扩展有一定的了解。通过系统调用调用C代码则更为简单,但效率相对较低。根据实际情况选择适合的方法。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部