MacOS 12安装V8Js

embedded/2024/10/21 13:43:48/

一、环境

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。编译安装命令如下:

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安装成功了。


http://www.ppmy.cn/embedded/18590.html

相关文章

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(四)

课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 7 - 9节) P7《06.ArkUI组件-Text》 本节我们继续学习 Text 文本组件: reaources目录下有3个主要的目录&…

Web3D在电商行业的应用:开启沉浸式购物新纪元!

随着科技的不断进步,电子商务领域也在不断探索新的技术手段,以提供更加优质、便捷的购物体验。其中,Web3D技术的兴起,为电子商务带来了革命性的变化,开启了沉浸式购物的新纪元。 Web3D技术是一种在网页上呈现三维立体图…

安装一个mysql5.7.37版本的数据库应用,端口映射到本机的3306端口

好的,以下是在 Docker 中安装 MySQL 5.7.37 并将其端口映射到本机的 3306 端口的步骤: 1. 拉取 MySQL 5.7.37 镜像: 首先,使用以下命令从 Docker Hub 拉取 MySQL 5.7.37 镜像: docker pull mysql:5.7.372. 运行 MyS…

“无媒体,不活动”,这句话怎么理解?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 “无媒体,不活动”通常指的是在现代社会中,媒体对于各种活动,尤其是公共活动和事件的推广、宣传和影响力是至关重要的。它强调了媒体在塑造公众意识、…

linux 编译binutil 遇到问题

在centos6.10上编译binutil2.27时遇到问题: as.c💯31: error: ‘DEFAULT_GENERATE_ELF_STT_COMMON’ undeclared here (not in a function) 搜到解决方法是这个: 1、https://github.com/riscv-software-src/riscv-tools/issues/66 &#xf…

基于Rust的多线程 Web 服务器

构建多线程 Web 服务器 在 socket 上监听 TCP 连接解析少量的 HTTP 请求创建一个合适的 HTTP 响应使用线程池改进服务器的吞吐量优雅的停机和清理注意:并不是最佳实践 创建项目 ~/rust ➜ cargo new helloCreated binary (application) hello package~/rust ➜ma…

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密数据恢复流程

网络技术的不断应用与发展,为企业的生产运营带来了极大便利,越来越多的企业依赖网络开展各项工作业务,网络也大大提升了企业的生产运营效率,但网络是一把双刃剑,在为企业提供便利的同时,也为企业的数据安全…

【解决Android Studio】Could not resolve com.android.tools.build:gradle:7.4.1

【报错信息】 所用IDE为Android studio2022 1.1 Patch 1。 使用Android Studio新创建的新工程,在build过程中报了以下错误: A problem occurred configuring root project Application. > Could not resolve all files for configuration :classpat…