
В README файлах официальных репозиториях V8 и V8JS достаточно информации по установке/компиляции компонентов для PHP 8+, но эти инструкции не работают для PHP 7.4.
Ниже, проверенная инструкция для установки из исходников V8 и компиляция модуля V8JS для PHP 7.4 на операционной системе Ubuntu 22…
Получаем рут права:
sudo su
Обновляем компоненты ОС ubuntu 22, чтобы работать с самыми актуальными версиями пакетов :
apt-get update -y --fix-missing && apt-get upgrade -y;
Добавляем репозитория для установки PHP и модулей (так как в стандартных репозитория нету PHP 7.4):
add-apt-repository ppa:ondrej/php
Устанавливаем PHP 7.4 с стандартными модулями:
apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-mysql php7.4-mbstring php7.4-zip php7.4-curl php7.4-gd php7.4-xml php7.4-dev
Далее, устанавливаем инструмент для сборки программного обеспечения (V8)
apt install ninja-build
И другие, необходимые для сборки проекта V8, инструменты:
apt-get install -y --no-install-recommends \ libtinfo5 libtinfo-dev \ build-essential \ curl \ git \ libglib2.0-dev \ libxml2 \ python2 \ patchelf \ && sudo ln -sf /usr/bin/python2.7 /usr/bin/python \ && 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 8.9.255.25 \ && gclient sync \ \ && tools/dev/v8gen.py -vv x64.release -- is_component_build=true use_custom_libcxx=false
В том числе Depot tools — набор утилит Гугла для сборки проектов (V8).
Из важного — используется не последняя версия V8 из репозитория, а версия 8.9.255.25
Процесс сборки представлен ниже:
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
После этого, можем скачивать и компилировать модуль V8Js:
cd /tmp \ && git clone https://github.com/phpv8/v8js.git \ && cd v8js \ && git reset --hard e648f43 \ && git checkout e648f43 \ && phpize \ && ./configure --with-v8js=/opt/v8 LDFLAGS="-lstdc++" CPPFLAGS="-DV8_COMPRESS_POINTERS" \ && make \ && make install
В результате успешного выполнения всех процедур будет файл v8js.so в папке /usr/lib/php/20190902
Необходимо добавить его в конфиги ini PHP:
cd /etc/php/7.4/cli/conf.d/
Создаем новый ini файл. Можно использовать любой редактор. В примере ниже используется nano:
nano 50-v8js.ini
Вводим всего одну строчку в свежем файле:
extension=v8js.so
И сохраняет этот файл.
Приступим к проверке работоспособности. Для этого переходим в любую временную папку на сервер и создаем тестовый php файл
cd /tmp nano test_v8js.php
В который вставляем следующий PHP код, задействующий V8Js :
<?php $v8js = new V8Js(); $JS = <<< EOT var s = 'Hello world'; s; EOT; $r = $v8js->executeString($JS); var_dump($r);
Сохраняем файл и запускаем:
php test_v8js.php
В случае успеха увидим вывод в консоли:
string(11) "Hello world"
elektrikçi
Kadıköy aplik
yakın bir konumdayız.
boru
Thank you for sharing this insightful article! I found the information really useful and thought-provoking. Your writing style is engaging, and it made the topic much easier to understand. Looking forward to reading more of your posts!
Fethiye
SEO backlinks
kxdtzt
SlUZMph tMD gBvSi Rmi Kykl zpHHaFx pFBFOyA