如何创建 PHP 扩展以与 C 函数交互

创建 php 扩展与 c 函数交互的步骤:创建 php 扩展项目并编写扩展源代码,调用 c 函数。编写 phpinfo 函数以检查扩展。配置扩展并安装。测试扩展,在 phpinfo 中应看到 "my extension" 已启用。

如何创建 PHP 扩展以与 C 函数交互

如何创建 PHP 扩展以与 C 函数交互

要创建 PHP 扩展并使其与 C 函数交互,您需要遵循以下步骤:

1. 创建 PHP 扩展项目

mkdir my_extension
cd my_extension

2. 创建 PHP 扩展源文件

vim my_extension.c

3. 编写扩展源代码

#include <php.h>

PHP_FUNCTION(my_c_function) {
  // ... 调用 C 函数 ...
}

PHP_MINIT_FUNCTION(my_extension) {
  // 初始化扩展
  zend_register_internal_function("my_c_function", my_c_function, 0);
  return SUCCESS;
}

4. 编写 PHPinfo 函数以检查扩展

PHP_FUNCTION(my_extension_info) {
  php_info_print_table_start();
  php_info_print_table_row(2, "My Extension", "enabled");
  php_info_print_table_end();
}

PHP_MINIT_FUNCTION(my_extension) {
  // ...
  zend_declare_function(NULL, "my_extension_info", my_extension_info, 0, 0, 0, 0);
  // ...
}

5. 配置扩展

cd ..
phpize
./configure
make
make install

6. 测试扩展

创建一个名为 test.php 的文件:

<?php
phpinfo();

运行它:

php test.php

PHPInfo 输出中,您应该看到 "My Extension" 被列为已启用。

实战案例

让我们创建一个扩展,它暴露一个名为 factorial 的 C 函数,该函数计算给定数字的阶乘。

在 my_extension.c 中添加以下代码:

#include <php.h>

int factorial(int n) {
  if (n == 0) {
    return 1;
  }
  return n * factorial(n - 1);
}

PHP_FUNCTION(factorial) {
  int n;

  if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &n) == FAILURE) {
    RETURN_NULL();
  }

  RETURN_LONG(factorial(n));
}

重新配置、构建和安装扩展:

phpize
./configure
make
make install

现在您可以在 PHP 中使用 factorial 函数:

<?php
echo factorial(5); // 输出: 120

以上就是如何创建 PHP 扩展以与 C 函数交互的详细内容,更多请关注其它相关文章!