From 09b8483ed67d3b85e983ef86c34260081975e1cb Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 2 May 2025 06:47:07 +0900 Subject: fix(blog/nuldoc): remove unnecessary "language" attribute --- .../compile-php-runtime-to-wasm/index.html | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm') diff --git a/vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html b/vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html index c00e82d0..0f4f9b88 100644 --- a/vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html +++ b/vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html @@ -103,7 +103,7 @@

先にこの記事のゴールを示しておく。これから示す手順のとおりに進めると、次のようなコードが動くようになる。 このコードはこのあと使うので、index.mjs の名前で保存しておくこと。

-
+
import { readFile } from 'node:fs/promises';
 import PHPWasm from './php-wasm.mjs'
 
@@ -128,7 +128,7 @@
               

先ほどのコードでも使っていたエントリポイントである php_wasm_run を用意する。

-
+
#include <stdio.h>
 #include <emscripten.h>
 #include <Zend/zend_execute.h>
@@ -177,7 +177,7 @@
                   

デフォルトの出力方法は index.mjs の中で PHPWasm() を呼ぶとき、stdoutstderr というオプションを渡せば変更できる。

-
+
const { ccall } = await PHPWasm({
   stdout: (c) => {
     if (c === null) {
@@ -205,13 +205,13 @@
               

まずは Emscripten 公式が提供している Docker イメージ を使って、PHP 処理系と先ほど示した C 言語のソースコードを WebAssembly にコンパイルする。

-
+
FROM emscripten/emsdk:3.1.46 AS wasm-builder

次に、 php/php-src から PHP 処理系のソースコードを取得し、ビルドに必要な apt パッケージを取ってくる。 有効にする拡張を増やしたいなら、ここでインストールするパッケージも増やすことになるだろう。

-
+
RUN git clone --depth=1 --branch=php-8.2.10 https://github.com/php/php-src
 
 RUN apt-get update && \
@@ -226,7 +226,7 @@
               

続けて、Emscripten のツールチェインを用いて PHP 処理系をビルドする。

-
+
RUN cd php-src && \
     ./buildconf --force && \
     emconfigure ./configure \
@@ -271,7 +271,7 @@
               

さて、PHP 処理系をライブラリ化できたので、次に先ほど載せた C のソースコードをビルドしていこう。 Dockerfile と同じ場所に php-wasm.c という名前で保存し、次のようにする。

-
+
COPY php-wasm.c /src/
 
 RUN cd php-src && \
@@ -295,7 +295,7 @@
               

libphp.aphp-wasm.o が手に入ったので、これらをリンクして WebAssembly のバイナリとそのラッパである JavaScript ファイルを生成する。 これにも emcc コマンドを使う。

-
+
RUN emcc \
     -s ENVIRONMENT=node \
     -s ERROR_ON_UNDEFINED_SYMBOLS=0 \
@@ -339,7 +339,7 @@
               

といっても、Node.js はビルトインで WebAssembly をサポートしているので、ほとんどやることはない。 先ほど掲載した JavaScript のコードは、Dockerfile と同じディレクトリに index.mjs で配置すること。

-
+
FROM node:20.7
 
 WORKDIR /app
@@ -356,7 +356,7 @@
             

Dockerfilephp-wasm.cindex.mjs を用意したら、Docker コンテナをビルドして実行する。

-
+
$ docker build -t php-wasm .
 $ echo 'echo "Hello, World!", PHP_EOL;' | docker run --rm -i php-wasm
 Hello, World!
-- 
cgit v1.2.3-70-g09d2