ripht_php_sapi/
lib.rs

1//! Rust bindings to PHP's Server API (SAPI) for embedding PHP in Rust applications.
2//!
3//! This crate provides a safe interface to execute PHP scripts from Rust, handling
4//! the request lifecycle, I/O callbacks, and superglobal population automatically.
5//!
6//! # Execution Model
7//!
8//! PHP runs in NTS (non-thread-safe) mode with one request executing at a time.
9//! Each request gets isolated state that's cleaned up after execution.
10//!
11//! # Example
12//!
13//! ```no_run
14//! use ripht_php_sapi::{RiphtSapi, WebRequest};
15//!
16//! let php = RiphtSapi::instance();
17//! let script = std::path::Path::new("/var/www/index.php");
18//!
19//! let request = WebRequest::get()
20//!     .with_uri("/api/users?id=42")
21//!     .build(script)
22//!     .expect("...");
23//!
24//! let result = php.execute(request).expect("execute");
25//! println!("Status: {}, Body: {}", result.status_code(), result.body_string());
26//! ```
27
28#![allow(static_mut_refs)]
29
30pub mod adapters;
31pub mod execution;
32
33mod sapi;
34
35pub use adapters::{
36    CliRequest, CliRequestError, Method, WebRequest, WebRequestError,
37};
38
39pub use sapi::{ExecutionError, Executor, RiphtSapi, SapiError};
40
41pub use execution::{
42    ExecutionContext, ExecutionHooks, ExecutionMessage, ExecutionResult,
43    NoOpHooks, OutputAction, ResponseHeader, StreamingCallback, SyslogLevel,
44};
45
46pub mod prelude {
47    pub use crate::{
48        CliRequest, CliRequestError, ExecutionContext, ExecutionHooks,
49        ExecutionMessage, ExecutionResult, Executor, Method, NoOpHooks,
50        OutputAction, ResponseHeader, RiphtSapi, SapiError, StreamingCallback,
51        SyslogLevel, WebRequest, WebRequestError,
52    };
53
54    #[cfg(feature = "http")]
55    pub use crate::{from_http_parts, from_http_request};
56}
57
58#[cfg(test)]
59use std::path::PathBuf;
60
61#[cfg(feature = "http")]
62pub use adapters::{from_http_parts, from_http_request};
63
64#[cfg(test)]
65pub fn php_script_path(name: &str) -> PathBuf {
66    PathBuf::from(env!("CARGO_MANIFEST_DIR"))
67        .join("tests/php_scripts")
68        .join(name)
69}