MacOS 12安装V8Js

一、环境

V8引擎(https://github.com/v8/v8)是Google的开源JavaScript引擎,性能很高,NodeJs就是采用了V8引擎。V8的作用就解析、运行JavaScript脚本,可以简单理解为JavaScript的解析器。

V8Js(https://github.com/phpv8/v8js)是php的一个插件(PECL扩展),是基于V8的,所以叫V8Js。

我们系统和软件环境如下:mac 12.7.2、php8.3.6。

二、安装V8

由于v8js不支持最新版的v8@12,因此不能直接使用brew install v8。需要安装v8的历史版本,这里我们使用v8@11。安装历史版本的方法可以参看:brew install:安装历史版本库-CSDN博客

三、安装V8Js

由于通过pecl安装的版本是2.1.2,适用于php 7,因此我们要采用源码编译安装最新版本,最新版本支持php 8。编译安装命令如下:

bash 复制代码
git clone  https://github.com/phpv8/v8js
cd v8js
phpize
./configure CXXFLAGS="-Wno-c++11-narrowing" LDFLAGS="-lstdc++" CPPFLAGS="-DV8_COMPRESS_POINTERS -DV8_ENABLE_SANDBOX" --with-php-config=/usr/local/opt/php/bin/php-config --with-v8js=/usr/local/Cellar/v8/11.0.226.13/libexec/ 
make && make install

这里注意的一点是由于v8开启了指针压缩和沙盒,因此v8js编译的时候也要采用同样的设置,否则运行会报错。具体的设置是CPPFLAGS="-DV8_COMPRESS_POINTERS -DV8_ENABLE_SANDBOX"。报错信息可以前往Apache错误日志查看,我也是通过这个发现程序卡在new V8()。

编译安装完之后,编译的产物v8js.so会被放到php 扩展目录下。

四、配置php并测试

可以通过phpinfo()或者

php --ini

查看PHP的配置文件目录。

在配置中添加一行:extension=v8js.so

这里需要注意一下pecl的扩展安装目录,和php的扩展目录是否一致。

php的扩展目录可以通过phpinfo查看

pecl的扩展安装目录可以通过如下命令查看

复制代码
$ pecl config-show | grep extension

配置完后记得重启一下apahce(重新加载php配置)。

如何测试?

是否加载

可以通过phpinfo()或以下命令查看扩展是否成功加载:

php -m

是否成功执行

能成功加载不表示扩展能成功执行,如果编译配置有误,仍然会在运行的时候出错。因此最终还是需要运行一下代码。

如果你用ThinkPHP框架(3.2.x)版本,由于命名空间的存在所以需要这样new出V8Js对象:

复制代码
$v8 = new \V8Js();

接着调用$v8对象的executeString方法即可:

复制代码
$v8->executeString(‘print("hello v8js!")’);

如果看见网页上输出"hello v8js!"就表示v8js安装成功了。

相关推荐
残月只会敲键盘8 小时前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88888 小时前
PHP弱类型安全问题
开发语言·安全·php
ac-er88888 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
yanwushu8 小时前
Xserver v1.4.2发布,支持自动重载 nginx 配置
mysql·nginx·php·个人开发·composer
事业运财运爆棚9 小时前
php 如何将数组转成对象数组
php
天下皆白_唯我独黑10 小时前
php 使用qrcode制作二维码图片
开发语言·php
残月只会敲键盘17 小时前
php代码审计--常见函数整理
开发语言·php
ac-er888818 小时前
MySQL如何实现PHP输入安全
mysql·安全·php
YUJIANYUE21 小时前
PHP将指定文件夹下多csv文件[即多表]导入到sqlite单文件
jvm·sqlite·php
龙哥·三年风水1 天前
群控系统服务端开发模式-应用开发-个人资料
分布式·php·群控系统