1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*!
A library that allows us to write PHP extensions using pure Rust and using safe Rust whenever possible.
## Usage
1. Make sure `libclang` and `php` is installed.
```bash
# If you are using debian like linux system:
sudo apt install libclang-10-dev php-cli
```
2. Create you cargo project, suppose your application is called myapp.
```bash
cargo new myapp
```
3. Add the dependencies and metadata to you Cargo project.
```toml
[lib]
crate-type = ["cdylib"]
[dependencies]
phper = "0.2"
```
4. Add these code to `main.rs`.
```no_run
use phper::cmd::make;
fn main() {
make();
}
```
5. Write you owned extension logic in `lib.rs`.
```no_run
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
}
```
6. Build and install, if your php isn't installed globally, you should specify the path of `php-config`.
```bash
# 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, if you install php globally, you should use sudo.
cargo run --release -- install
```
7. Edit your `php.ini`, add the below line.
```ini
extension = myapp
```
8. Enjoy.
## examples
See [examples](https://github.com/jmjoy/phper/tree/master/examples).
## License
[Unlicense](https://github.com/jmjoy/phper/blob/master/LICENSE).
*/
pub use crate;
pub use phper_alloc as alloc;
pub use *;
pub use phper_sys as sys;