- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用此 Dockerfile 安装 V8JS
FROM php:7.3-cli-buster
RUN apt-get update -y --fix-missing && apt-get upgrade -y;
# Install v8js
RUN apt-get install -y libv8-dev
RUN pecl install v8js
RUN docker-php-ext-enable v8js
但我遇到配置错误:
checking for V8 files in default path... not found
configure: error: Please reinstall the v8 distribution ERROR: `/tmp/pear/temp/v8js/configure --with-php-config=/usr/local/bin/php-config --with-v8js' failed The command '/bin/sh -c pecl install v8js' returned a non-zero code: 1
完整的 cli 输出:
Sending build context to Docker daemon 35.6MB
Step 1/5 : FROM php:7.3-cli-buster
---> c7ff0bf4f6fb
Step 2/5 : RUN apt-get update -y --fix-missing && apt-get upgrade -y;
---> Using cache
---> e151d6e061d2
Step 3/5 : RUN apt-get install -y libv8-dev
---> Using cache
---> fe35f48dd8cf
Step 4/5 : RUN pecl install v8js
---> Running in d9f4ba184d81
downloading v8js-2.1.1.tgz ...
Starting to download v8js-2.1.1.tgz (101,888 bytes)
.......................done: 101,888 bytes
28 source files, building
running: phpize
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Please provide the installation prefix of libv8 [autodetect] : building in /tmp/pear/temp/pear-build-defaultuserEVh9Nq/v8js-2.1.1
running: /tmp/pear/temp/v8js/configure --with-php-config=/usr/local/bin/php-config --with-v8js
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking for cc option to accept ISO C89... none needed
checking how to run the C preprocessor... cc -E
checking for icc... no
checking for suncc... no
checking whether cc understands -c and -o together... yes
checking for system library directory... lib
checking if compiler supports -R... no
checking if compiler supports -Wl,-rpath,... yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for PHP prefix... /usr/local
checking for PHP includes... -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib
checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20180731
checking for PHP installed headers prefix... /usr/local/include/php
checking if debug is enabled... no
checking if zts is enabled... no
checking for re2c... re2c
checking for re2c version... 1.1.1 (ok)
checking for gawk... no
checking for nawk... nawk
checking if nawk is broken... no
checking for V8 Javascript Engine... yes, shared
checking for V8 files in default path... not found
configure: error: Please reinstall the v8 distribution
ERROR: `/tmp/pear/temp/v8js/configure --with-php-config=/usr/local/bin/php-config --with-v8js' failed
The command '/bin/sh -c pecl install v8js' returned a non-zero code: 1
如何解决配置错误(我猜是因为缺少 V8 文件的路径)并在 PHP Docker 上从 Debian Buster 安装 V8JS?
编辑
@saulotoledo 的 Dockerfile 答案有效:)
构建镜像大约需要 60-90 分钟,镜像大小为 5.47GB,而基础镜像 (FROM) 7.3-cli-buster 为 367MB
要使用 V8JS 构建 Dockerfile php,请复制 @saulotoledo 答案中的代码并将其粘贴到名为 Dockerfile
的文件中
然后在同一目录中运行以下命令:
docker build --tag "test-php-js" .
然后以这种方式运行容器:
docker run -it --rm --entrypoint="" --name="php-v8js" test-php-js /bin/sh
您应该登录到 php-cli 的终端,输入:
php -m
您应该会看到已启用的扩展列表,其中包括 v8js
类型:
php --ri v8js
查看一些详细信息,例如:
V8 Javascript Engine => enabled
V8 Engine Compiled Version => 7.4.288.21
V8 Engine Linked Version => 7.4.288.21
Version => 2.1.1
现在是你们一直在等待的樱桃部分 - 输入:
php -r "(new V8Js())->executeString(\"print('Hello' + ' from JS ' + 'World!')\", 'basic.js');";
查看 php 在 V8JS 支持下运行 js 代码:D
Hello from JS World!
请注意,我需要在 php -r
命令的每个 JS 双引号 "
前面添加额外的反斜杠 \
。但这仅是由于在 cli 模式下从 php 作为 oneliner 运行 JS。
通常情况下你不需要这个 See an official PHP documentation example
有谁知道是否可以安装并启用 V8JS 扩展,而无需从源代码构建它,而是使用 Debian Buster 包和 PECL,就像我一开始尝试的那样?
最佳答案
编辑:这应该可以解决您的问题(请注意,我正在手动编译它):
FROM php:7.3-cli-buster
ENV V8_VERSION=7.4.288.21
RUN apt-get update -y --fix-missing && apt-get upgrade -y;
# Install v8js (see https://github.com/phpv8/v8js/blob/php7/README.Linux.md)
RUN apt-get install -y --no-install-recommends \
libtinfo5 libtinfo-dev \
build-essential \
curl \
git \
libglib2.0-dev \
libxml2 \
python \
patchelf \
&& cd /tmp \
\
&& git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --progress --verbose \
&& export PATH="$PATH:/tmp/depot_tools" \
\
&& fetch v8 \
&& cd v8 \
&& git checkout $V8_VERSION \
&& gclient sync \
\
&& tools/dev/v8gen.py -vv x64.release -- is_component_build=true use_custom_libcxx=false
RUN export PATH="$PATH:/tmp/depot_tools" \
&& cd /tmp/v8 \
&& ninja -C out.gn/x64.release/ \
&& mkdir -p /opt/v8/lib && mkdir -p /opt/v8/include \
&& cp out.gn/x64.release/lib*.so out.gn/x64.release/*_blob.bin out.gn/x64.release/icudtl.dat /opt/v8/lib/ \
&& cp -R include/* /opt/v8/include/ \
&& apt-get install patchelf \
&& for A in /opt/v8/lib/*.so; do patchelf --set-rpath '$ORIGIN' $A;done
# Install php-v8js
RUN cd /tmp \
&& git clone https://github.com/phpv8/v8js.git \
&& cd v8js \
&& phpize \
&& ./configure --with-v8js=/opt/v8 LDFLAGS="-lstdc++" \
&& make \
&& make test \
&& make install
RUN docker-php-ext-enable v8js
旧答案:
我相信你需要手动编译V8。我还不确定为什么 libv8-dev 还不够。由于这不起作用,您需要编译它,因为 it is a requirement .
也就是说,this link可能会有帮助。但官方给出了编译说明here 。经过几次测试后,我注意到您需要将 libtinfo5
添加到您的 apt -get install
,否则说明中的ninja构建会失败。
在 Dockerfile 中使用该编译指令后,V8 将正确编译。之后,您在安装 pecl 时仍然会遇到一些问题。不幸的是我现在不得不停止调查这个问题,编译需要一些时间。但是,以下链接可能会帮助您解决问题:
希望对您有帮助。如果您设法拥有一个可用的 Dockerfile,请稍后与我们分享。如果我稍后有时间进行调查并且取得了一些进展,我将编辑我的答案。
关于PHP Docker 安装 pecl V8JS (Debian Buster),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60822501/
假设您不希望其他站点以 格式“框定”您的站点: 因此,您将反框架、破坏框架的 JavaScript 插入到您的所有页面中: /* break us out of any containing if
假设您不希望其他网站在 中“框定”您的网站: 因此,您将反框架、框架破坏 JavaScript 插入到所有页面中: /* break us out of any containing iframe
如果网页使用了 this question 中提到的 frame-buster buster,我该如何停止加载该网页? , 或者更强的 X-Frame-Options: deny喜欢 stackove
如何使用 Buster 测试从远程服务器获取文件的功能?我写的测试像 buster.testCase("Remote fetch file", { "test it": function ()
我们被要求在我们的网站上托管一些 iframe Buster 脚本 - 它们允许从外部域转换到 iframe 中的广告从 iframe 外部扩展到主机页面。我们的托管提供商警告我们要注意这些脚本中的安
我对展开式广告和 有一些疑问秒。我已经创建了将显示在 中的可扩展广告秒。这些广告将由已知的广告服务器转换,例如 doubleclick、smartadserver、eyewonder 等。 感谢s
我关注 these用于查找安装在 debian:buster 上的开箱即用的 ca 证书的指南 docker 形象。 但是,事实证明具有相应信息的文件不存在。 ▶ docker run -it deb
我对Raspberry Pi和Linux/Debian还是很陌生,所以请多多包涵。我已经尝试了几个小时,以在我的Raspberry Pi 3上安装RabbitMQ,但无济于事。我遵循了这些步骤,但是最
现在很多官方的 Docker 镜像都是基于 Debian Buster 的。我们曾经安装过chromedriver在基于 Stretch 的图像中打包,但现在它不再可用。 最佳答案 包被重命名为 ch
在 javascript 中将 buster.js 用于 BDD,我有一些相当庞大的 API 需要测试。在某些情况下,默认超时不会为我做这件事。如何覆盖(异步)规范的默认超时? describe("G
我想使用 Buster.js 创建一个全局设置/拆卸方法,但我不明白该怎么做。该文档提到了“suit:start ”和“suite:end”事件,它看起来像我所追求的,但我不明白如何连接它。有人吗?
在 ASP.Net 网站中自动应用和/或更新我的 javascript 和样式表引用上的缓存破坏器变量的好策略是什么? 例如。转型 到 更新:不需要持续集成。 我正在使用持续集成(具体来说是 Je
我正在尝试对 Debian Buster 中 php-fpm 上发生的某些段错误进行有意义的回溯。 阅读Debian's guide , 我明白那个 我需要添加调试仓库 deb http://deb.
似乎Debian repo提供的 Varnish 6.1.1被标记为“安全性”,并且修复仅在 Varnish 版本^ 6.2.1上可用。 所以我环顾四周并降落在这里https://packageclo
我正在开发一个扩展,有时会在 iframe 内显示一些网站。我已经绕过了 X-FRAME-OPTIONS 问题,但现在我陷入了简单 iframe buster 代码,例如: if (top != se
我尝试使用此 Dockerfile 安装 V8JS FROM php:7.3-cli-buster RUN apt-get update -y --fix-missing && apt-get upg
安装 Debian 10 (Buster) 时,桌面/GUI 应用程序速度很慢。打开应用程序(例如 Firefox、Terminal...)需要很长时间,并且系统根本无法使用。 apt update
我看到这段代码可以帮助解决 iframe 中的点击劫持问题 html { display : none; } if( self == top ) { document.docum
我第一次尝试使用 Buster.js 进行 Javascript 测试 我已按照 the Buster site 中的说明进行操作运行“陈述显而易见”的测试。但是,我无法将任何现有的 .js 文件导入
我在 IE 缓存所有内容时遇到问题,所以如果我切换用户,我仍然会看到来自不再登录的旧用户的数据。 我试过这个解决方案(位于:Angular IE Caching issue for $http),它有
我是一名优秀的程序员,十分优秀!