当前位置: 首页 > 文档资料 > PHP-X 中文文档 >

Embed

优质
小牛编辑
124浏览
2023-12-01

C++程序中可以内嵌一个ZendVM,实现与PHP程序的交互。需要依赖PHP官方的embed模块。编译PHP时需要增加--enable-embed参数。

编写程序

#include "phpx_embed.h"
#include <iostream>

using namespace php;
using namespace std;

int main(int argc, char * argv[])
{
    VM vm(argc, argv);
    vm.eval("echo 'Hello World!';");
    vm.include("embed.php");

    auto a = constant("SWOOLE_BASE");
    cout << "SWOOLE_BASE = " << a.toInt() << endl;

    auto obj = newObject("Test");
    auto ret = obj.call("getName");

    cout << ret.toString() << endl;

    obj.set("name", "Tianfeng");

    auto ret2 = obj.call("getName");
    cout << ret2.toString() << endl;

    return 0;
}
  • VM类就是ZendVM虚拟机环境,构造方法中自动初始化VM。由于ZendVM使用了大量全局变量,一个进程内只能创建一个VM
  • VM对象析构时自动销毁ZendVM
  • vm对象有2个APIeval方法可以执行任意的PHP代码,include方法用于加载一个PHP脚本并执行
  • VM初始化后,可以在C++程序中调用PHP-X中提供的接口与PHP进行交互

编译程序

PHP_INCLUDE = `php-config --includes`
PHP_LIBS = `php-config --libs`
PHP_LDFLAGS = `php-config --ldflags`

all: embed.cpp
    c++ -DHAVE_CONFIG_H -g -o embed -O0 embed.cpp -std=c++11  ${PHP_INCLUDE} ${PHP_LDFLAGS} -lphp7 -lphpx ${PHP_LIBS}
  • -lphp7载入PHP7的动态连接库
  • -lphpx载入PHP-X动态连接库