wasmerio/wasmer-php
wasmerio/wasmer-php has 1,050 GitHub stars and 43 forks. GitHot measured 0 stars in 24 hours and +1 in 7 days. Last checked 2026-11-13 06:34 UTC. Last push 2024-02-27.
🐘🕸️ WebAssembly runtime for PHP
What you can do
- 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.
측정된 스타 증가
- in 24h
- 0
- in 7 days
- +1
- in 15 days
- 기록 수집 중
- in 1 month
- 기록 수집 중
서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.
README.md
OriginalA complete and mature WebAssembly runtime for PHP based on Wasmer.
Features
- Easy to use: The
wasmerAPI mimics the standard WebAssembly C API, - Fast:
wasmerexecutes 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.
Install
To install the library, follow the classical:
git clone https://github.com/wasmerio/wasmer-php
cd wasmer-php/ext
phpize
./configure --enable-wasmer
make
make test
make install
Note: Wasmer doesn't work on Windows yet.
Examples
Procedural API
<?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);
Object-oriented API
<?php
declare(strict_types=1);
use Wasm;
require_once __DIR__.'/../vendor/autoload.php';
$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\Module\Func::new($store, $functype, 'hello_callback');
$extern = $func->asExtern();
$externs = new Wasm\Vec\Extern([$extern->inner()]);
$instance = Wasm\Module\Instance::new($store, $module, $externs);
$exports = $instance->exports();
$run = $exports[0]->asFunc();
$args = new Wasm\Vec\Val();
$results = $run($args);
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 directories:
Supported platforms and features
Platforms
| Platform | Architecture | Status |
|---|---|---|
| Linux | amd64 |
✅ |
| Linux | aarch64 |
❌ |
| Windows | amd64 |
❌ |
| Darwin | amd64 |
✅ |
| Darwin | aarch64 |
❌ |
| PHP | Status |
|---|---|
| 8.0 | ✅ |
| 7.4 | ❌ |
| 7.3 | ❌ |
Features
Compilers and engines
| Compiler | Status |
|---|---|
| Cranelift | ✅ |
| LLVM | ❌ |
| Singlepass | ❌ |
| Engine | Status |
|---|---|
| Native | ✅ |
| JIT | ✅ |
| Object File | ❌ |
Runtime
| Object | Status |
|---|---|
| config | ✅ |
| engine | ✅ |
| store | ✅ |
Types
| Type | Status |
|---|---|
| valtype | ✅ |
| functype | ✅ |
| globaltype | ✅ |
| tabletype | ✅ |
| memorytype | ✅ |
| externtype | ✅ |
| importtype | ✅ |
| exporttype | ✅ |
Objects
| Object | Status |
|---|---|
| val | ✅ |
| frame | ✅ |
| trap | ✅ |
| foreign | ✅ |
| module | ✅ |
| func | ✅ |
| global | ✅ |
| table | 🧑💻 |
| memory | ✅ |
| extern | ✅ |
| instance | ✅ |
Misc
| Feature | Status |
|---|---|
| WAT | ✅ |
| WASI | ❌ |
| Cross Compilation | ❌ |
License
The entire project is under the MIT License. Please read the
LICENSE file.
관련 프로젝트 살펴보기
freeCodeCamp/freeCodeCamp
freeCodeCamp.org의 오픈 소스 코드베이스와 커리큘럼입니다. 수학, 프로그래밍, 컴퓨터 과학을 무료로 배울 수 있습니다.
459,071 스타donnemartin/system-design-primer
대규모 시스템 설계 방법을 배우고 시스템 설계 면접을 준비할 수 있습니다. Anki 플래시카드가 포함되어 있습니다.
377,743 스타react/react
웹과 네이티브 사용자 인터페이스를 위한 라이브러리.
252,571 스타vuejs/vue
Vue 2 저장소입니다. Vue 3은 https://github.com/vuejs/core를 방문하세요.
212,527 스타