Expand description
PHPER (PHP Enjoy Rust)
Rust ❤️ PHP
The framework that allows us to write PHP extensions using pure and safe Rust whenever possible.
Requirement
Necessary
- rust 1.56 or later
- libclang 9.0 or later
- php 7.0 or later
Tested Support
- 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
Usage
-
Make sure
libclang
andphp
is installed.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(); }
-
Create the
build.rs
( Adapting MacOS ).fn main() { #[cfg(target_os = "macos")] { println!("cargo:rustc-link-arg=-undefined"); println!("cargo:rustc-link-arg=dynamic_lookup"); } }
-
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
.cargo build --release cargo run --release -- install
-
Edit your
php.ini
, add the below line.extension = myapp
-
Enjoy.
Examples
See examples.
The projects using PHPER
- apache/skywalking-php - The PHP Agent for Apache SkyWalking, which provides the native tracing abilities for PHP project.
License
Re-exports
pub use crate::errors::Error;
pub use crate::errors::Result;
pub use phper_alloc as alloc;
pub use phper_sys as sys;
Modules
Apis relate to crate::sys::zend_array.
Apis relate to crate::sys::zend_class_entry.
Command tools for build, test and install extension process.
The errors for crate and php.
Apis relate to crate::sys::zend_function_entry.
Apis relate to crate::sys::zend_ini_entry_def.
Apis relate to crate::sys::zend_module_entry.
Apis relate to crate::sys::zend_object.
Logs and echo facilities.
Apis relate to crate::sys::zend_resource.
Apis relate to crate::sys::zend_string.
Apis relate to PHP types.
Apis relate to crate::sys::zval.
Macros
C style string end with ‘\0’.
C style string end with ‘\0’.
Equivalent to the php
CG
.PHP deprecated logging.
PHP echo.
Equivalent to the php
EG
.PHP error logging, will exit the request.
PHP notice logging.
Equivalent to the php
PG
.Equivalent to the php
SG
.PHP warning logging.
Attribute Macros
PHP module entry, wrap the
phper::modules::Module
write operation.Derive Macros
Auto derive for
phper::errors::Throwable
.