Eine vollständige und ausgereifte WebAssembly-Laufzeitumgebung für PHP basierend auf Wasmer.
Einfach zu verwenden : Die wasmer
-API ahmt die Standard-WebAssembly-C-API nach.
Schnell : wasmer
führt die WebAssembly-Module so schnell wie möglich aus, nahe der nativen Geschwindigkeit .
Sicher : Alle Aufrufe von WebAssembly erfolgen schnell, aber was noch wichtiger ist, absolut sicher und in einer Sandbox.
Um die Bibliothek zu installieren, befolgen Sie die klassische Anleitung:
Git-Klon https://github.com/wasmerio/wasmer-phpcd wasmer-php/ext phpize ./configure --enable-wasmer machen testmake installieren
Hinweis: Wasmer funktioniert noch nicht unter Windows.
<?php define(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 'Rückruf...' . PHP_EOL;echo '> Hallo Welt!' . PHP_EOL;null zurückgeben; }$functype = wasm_functype_new(new WasmVecValType(), new WasmVecValType());$func = wasm_func_new($store, $functype, 'hello_callback');wasm_functype_delete($functype);$extern = wasm_func_as_extern($func);$externs = neu WasmVecExtern([$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 WasmVecVal());wasm_store_delete($store);wasm_engine_delete($engine);
<?phpdeclare(strict_types=1);use Wasm;require_once __DIR__.'/../vendor/autoload.php';$engine = WasmEngine::new();$store = WasmStore::new($engine);$ wasm = file_get_contents(__DIR__.DIRECTORY_SEPARATOR.'hello.wasm');$module = WasmModule::new($store, $wasm);function hello_callback() {echo 'Rückruf...'.PHP_EOL;echo '> Hello World!'.PHP_EOL;return null; }$functype = WasmFunctype::new(new WasmVecValType(), new WasmVecValType());$func = WasmModuleFunc::new($store, $functype, 'hello_callback');$extern = $func->asExtern(); $externs = new WasmVecExtern([$extern->inner()]);$instance = WasmModuleInstance::new($store, $module, $externs);$exports = $instance->exports();$run = $exports[0]->asFunc();$args = new WasmVecVal();$results = $run($args);
Dieses Beispiel deckt den grundlegendsten Wasm-Anwendungsfall ab: Wir nehmen ein Wasm-Modul (in seiner Textdarstellungsform), erstellen daraus eine Instanz, rufen eine exportierte Funktion ab und führen sie aus.
Weitere Beispiele für Fortgeschrittene finden Sie in den entsprechenden Verzeichnissen:
Prozedurale API
Objektorientierte API
Plattform | Architektur | Status |
---|---|---|
Linux | amd64 | |
Linux | aarch64 | |
Windows | amd64 | |
Darwin | amd64 | |
Darwin | aarch64 |
PHP | Status |
---|---|
8,0 | |
7.4 | |
7.3 |
Compiler | Status |
---|---|
Kranlift | |
LLVM | |
Singlepass |
Motor | Status |
---|---|
Einheimisch | |
JIT | |
Objektdatei |
Objekt | Status |
---|---|
config | |
Motor | |
speichern |
Typ | Status |
---|---|
Valtyp | |
Funktionstyp | |
globaltype | |
Tabellentyp | |
Speichertyp | |
externer Typ | |
Importtyp | |
Exporttyp |
Objekt | Status |
---|---|
val | |
rahmen | |
fangen | |
ausländisch | |
Modul | |
Funktion | |
global | |
Tisch | |
Erinnerung | |
extern | |
Beispiel |
Besonderheit | Status |
---|---|
WAS | |
WASI | |
Cross-Compilation |
Das gesamte Projekt steht unter der MIT-Lizenz. Bitte lesen Sie die LICENSE
Datei.