ripht-php-sapi 0.1.0-rc.9

Ripht PHP SAPI - A PHP SAPI written in Rust to expose safe and convenient APIs to encourage additional Rust tooling development for PHP
Documentation
use ripht_php_sapi::{
    ExecutionHooks, ExecutionMessage, ExecutionResult, OutputAction, RiphtSapi,
    WebRequest,
};
use std::path::{Path, PathBuf};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let sapi = RiphtSapi::instance();

    println!("==== Env and Ini demo ====");

    let script_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
        .join("tests/php_scripts")
        .join("env_and_ini.php");

    let exec = WebRequest::get()
        .with_env("FOO", "bar")
        .with_env("HELLO", "world")
        .with_ini("display_errors", "1")
        .with_ini("memory_limit", "64M")
        .build(&script_path)?;

    let result = sapi.execute_with_hooks(exec, ValidationHooks)?;

    println!("Status: {}", result.status_code());

    println!("\nOutput from PHP:");
    println!("{}", result.body_string());

    Ok(())
}

struct ValidationHooks;

impl ExecutionHooks for ValidationHooks {
    fn on_script_executing(&mut self, script_path: &Path) {
        println!("[Hook] Executing: {}", script_path.display());
    }

    fn on_script_executed(&mut self, success: bool) {
        println!("[Hook] Script executed successfully: {}", success);
    }

    fn on_output(&mut self, data: &[u8]) -> OutputAction {
        println!("[Hook] Output received: {} bytes", data.len());
        OutputAction::Continue
    }

    fn on_status(&mut self, code: u16) {
        println!("[Hook] Response status: {}", code);
    }

    fn on_php_message(&mut self, message: &ExecutionMessage) {
        println!(
            "[Hook] PHP message: {:?} - {}",
            message.level, message.message
        );
    }

    fn on_request_finished(&mut self, _result: &ExecutionResult) {
        println!("[Hook] Request finished\n");
    }
}