A complete and mature WebAssembly runtime for PHP based on Wasmer .
You are seeing the readme for the latest Wasmer Go version, if you are using an older version, please go to:
Easy to use : The wasmer API mimics the standard WebAssembly C API,
Fast : wasmer executes the WebAssembly modules as fast as possible, close to native speed ,
Safe : All calls to WebAssembly will be fast, but more importantly, completely safe and sandboxed.
To install the library, follow the classical:
git clone https://github.com/wasmerio/wasmer-php
cd wasmer-php
phpize
./configure --enable-wasmer
make
make test
make install
Note: Wasmer doesn't work on Windows yet.
<?php declare (strict_types=1 );
$ engine = wasm_engine_new ();
$ store = wasm_store_new ($ engine );
$ wasm = file_get_contents (__DIR__ . DIRECTORY_SEPARATOR . 'hello.wasm ' );
$ module = wasm_module_new ($ store , $ wasm );
function hello_callback () {
echo 'Calling back... ' . PHP_EOL ;
echo '> Hello World! ' . PHP_EOL ;
return null ;
}
$ functype = wasm_functype_new (new Wasm \Vec \ValType (), new Wasm \Vec \ValType ());
$ func = wasm_func_new ($ store , $ functype , 'hello_callback ' );
wasm_functype_delete ($ functype );
$ extern = wasm_func_as_extern ($ func );
$ externs = new Wasm \Vec \Extern ([$ extern ]);
$ instance = wasm_instance_new ($ store , $ module , $ externs );
wasm_func_delete ($ func );
$ exports = wasm_instance_exports ($ instance );
$ run = wasm_extern_as_func ($ exports [0 ]);
wasm_module_delete ($ module );
wasm_instance_delete ($ instance );
$ results = wasm_func_call ($ run , new Wasm \Vec \Val ());
wasm_store_delete ($ store );
wasm_engine_delete ($ engine );
This example covers the most basic Wasm use case: we take a Wasm module (in its text representation form), create
an instance from it, get an exported function and run it.
You can go through more advanced examples in the dedicated directory .
Supported platforms and features
Platform
Architecture
Status
Linux
amd64
✅
Linux
aarch64
❌
Windows
amd64
❌
Darwin
amd64
✅
Darwin
aarch64
❌
PHP
Status
8.0
✅
7.4
❌
7.3
❌
Compiler
Status
Cranelift
❌
LLVM
❌
Singlepass
✅
Engine
Status
Native
✅
JIT
✅
Object File
❌
Object
Status
config
✅
engine
✅
store
✅
Type
Status
valtype
✅
functype
✅
globaltype
✅
tabletype
✅
memorytype
✅
externtype
✅
importtype
✅
exporttype
✅
Object
Status
val
✅
frame
✅
trap
✅
foreign
✅
module
✅
func
✅
global
✅
table
✅
memory
✅
extern
✅
instance
✅
Feature
Status
WAT
✅
WASI
❌
Cross Compilation
❌
The entire project is under the MIT License. Please read the
LICENSE file .