The framework that allows us to write PHP extensions using pure and safe Rust whenever possible.
- rust 1.56 or later
- libclang 9.0 or later
- php 7.0 or later
- OS
- linux
- macos
- windows
- PHP
- version
- 7.0
- 7.1
- 7.2
- 7.3
- 7.4
- 8.0
- 8.1
- mode
- nts
- zts
- sapi
- cli
- fpm
- debug
- disable
- enable
- version
-
Make sure
libclang
andphp
is installed.# If you are using debian like linux system: sudo apt install llvm-10-dev libclang-10-dev php-cli
-
Create you cargo project, suppose your application is called myapp.
cargo new myapp
-
Add the dependencies and metadata to you Cargo project.
[lib] crate-type = ["cdylib"] [dependencies] phper = "<LATEST VERSION>"
-
Add these code to
main.rs
.use phper::cmd::make; fn main() { make(); }
-
Write you owned extension logic in
lib.rs
.use phper::{php_get_module, modules::Module}; #[php_get_module] pub fn get_module() -> Module { let mut module = Module::new( env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"), env!("CARGO_PKG_AUTHORS"), ); // ... module }
-
Build and install, if your php isn't installed globally, you should specify the path of
php-config
.# Optional, specify if php isn't installed globally. # export PHP_CONFIG=<Your path of php-config> # Build libmyapp.so. cargo build --release # Install to php extension path. cargo run --release -- install # Or if you install php globally, you should use sudo. # sudo ./target/release/myapp install
-
Edit your
php.ini
, add the below line.extension = myapp
-
Enjoy.
See examples.