安装php-v8扩展实现在PHP中运行javascript代码

概述

v8和php-v8

js代码要执行,需要借助javascript引擎将js代码编译成CPU认识的指令集。v8就是一款javascript引擎,chrome和node底层都使用了V8引擎。
php-v8是一个 PHP 7.x 扩展,它将V8 JavaScript 引擎 API 引入 PHP,提供了可从 PHP 获得的准确的原生 V8 C++ API 实现。

使用场景

php在处理一些网页时,可能需要实现js代码中的某些功能或者函数,但php中没有内置的函数实现时(例如js中的escape和unescape函数,php中并没有相同功能的函数),那么可以使用v8引擎来直接在php中运行js代码。

安装

安装php-v8扩展前,需要先安装v8,由于安装过程比较复杂,这里直接使用提供好的docker版本。

docker run -it phpv8/php-v8 bash -c "php test.php"

如果想执行自己的php文件,可以通过-v参数向docker共享自己的文件:

docker run --rm -v /home/v8:/home -it phpv8/php-v8 bash -c "php /home/unescape.php"
# 将本地的/home/v8文件夹共享到docker虚拟机中的/home文件夹,后面执行的php /home/unescape.php命令等同于执行本地/home/v8/目录下的unescape.php文件
# --rm 的含义是运行后立即删除容器

示例代码

<?php declare(strict_types=1);

use V8\{
    Isolate,
    Context,
    StringValue,
    Script,
};

$script_source_string = "function say() { return 'Hello' + ', World!'}; say()";

$isolate = new Isolate();
$context = new Context($isolate);
$source  = new StringValue($isolate, $script_source_string);

$script = new Script($context, $source);
$result = $script->run($context);

echo $result->value(), PHP_EOL;

参考文档

https://php-v8.readthedocs.io/en/latest/getting-started/index.html

发表评论

邮箱地址不会被公开。 必填项已用*标注