前言
mac版v8js的安裝真的是各種問題,相信大家嘗試過的都深有感觸,我在網(wǎng)上找了各種教程灶壶,大多都是千篇一律评姨,而且大多數(shù)都是老版本 即使最新的也有很多問題,最終在
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
- 確保你的系統(tǒng)沒有安裝過v8,如果有安裝, 刪除雏亚。
- brew install v8
- 安裝成功后在 /usr/local/Cellar/v8/********/ 可以看到
注意注意注意注意注意注意注意注意注意注意注意注意
查看 /usr/local/Cellar/v8/********/libexec 下面有沒有l(wèi)ib目錄 沒有的話 執(zhí)行創(chuàng)建
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
其中*****號(hào)為你安裝的目錄版本號(hào)
做這一步的目的是罢低, 安裝v8js的時(shí)候, 默認(rèn)是取lib目錄下面去找胖笛。不做處理的話會(huì)一直報(bào) 下面錯(cuò)誤网持。不管是pecl 還是自己編譯都不會(huì)通過。Please reinstall the v8 distribution
安裝v8js擴(kuò)展
注意v8js對應(yīng)目錄替換為你安裝的v8目錄
安裝方式1
將v8js克隆到本地: git clone https://github.com/phpv8/v8js
-
從源代碼構(gòu)建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 =”對應(yīng)目錄/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);
}
?>