前言
mac版v8js的安装真的是各种问题,相信大家尝试过的都深有感触,我在网上找了各种教程,大多都是千篇一律,而且大多数都是老版本 即使最新的也有很多问题,最终在
GitHub issues 找到了解决方案,因此在此记录一下
版本
- Mac os:10.15.1
- PHP:7.2.30
- PECL:1.10.11
lizaimin$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.1
BuildVersion: 19B88
lizaimin$ php -v
PHP 7.2.23 (cli) (built: Oct 3 2019 19:50:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.23, Copyright (c) 1999-2018, by Zend Technologies
lizaimin$ pecl version
PEAR Version: 1.10.9
PHP Version: 7.2.23
Zend Engine Version: 3.2.0
Running on: Darwin lizaiminMacBook.local 19.0.0 Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64 x86_64
安装v8
- 确保你的系统没有安装过v8,如果有安装, 删除。
- brew install v8
- 安装成功后在 /usr/local/Cellar/v8/********/ 可以看到
注意注意注意注意注意注意注意注意注意注意注意注意
-
查看 /usr/local/Cellar/v8/********/libexec 下面有没有lib目录 没有的话 执行创建
mkdir -p /usr/local/Cellar/v8/7.4.288.25/libexec/lib -
把libexec下面的的所有文件拷贝一份, 放到lib下面。
cp /usr/local/Cellar/v8/*******/libexec/* /usr/local/Cellar/v8/******/libexec/lib
其中*****号为你安装的目录版本号
做这一步的目的是, 安装v8js的时候, 默认是取lib目录下面去找。不做处理的话会一直报 下面错误。不管是pecl 还是自己编译都不会通过。Please reinstall the v8 distribution
安装v8js扩展
注意v8js对应目录替换为你安装的v8目录
安装方式1
-
将v8js克隆到本地: git clone https://github.com/phpv8/v8js
-
从源代码构建v8js:
git clone https://github.com/phpv8/v8js cd v8js phpize ./configure CXXFLAGS="-Wno-c++11-narrowing" --with-v8js="/usr/local/Cellar/v8/7.4.288.25/libexec" make && make install
安装方式2
sudo pecl install v8js
在PHP中启用v8js
-
查找php.ini文件
➜ ~ php --ini Configuration File (php.ini) Path: /usr/local/etc/php/7.2 Loaded Configuration File: /usr/local/etc/php/7.2/php.ini Scan for additional .ini files in: /usr/local/etc/php/7.2/conf.d Additional .ini files parsed: /usr/local/etc/php/7.2/conf.d/ext-opcache.ini,
-
打开php.ini文件
vim /usr/local/etc/php/7.2/php.ini
-
将此行添加到开头并保存ini文件: extension =”对应目录/v8js.so”
-
重启php
测试
<?php
$v8 = new V8Js();
/* basic.js */
$JS = <<< EOT
len = print('Hello' + ' ' + 'World!' + "\\n");
len;
EOT;
try {
var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
var_dump($e);
}
?>
网友评论