From c65cab710bb3d79db20862c9361d4dbbac8ac5d7 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Thu, 25 Jun 2026 03:20:08 +0900 Subject: feat(php-shim): model $_ENV/$_SERVER as OsString snapshots Rework the environment shim around getenv/putenv on the real environment and $_ENV/$_SERVER as startup snapshots, all over OsString. Migrate every caller off the old server()/server_argv() helpers and force the snapshots in main() before any putenv() runs. Document the porting rules in docs/dev/env-vars-porting.md. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/symfony/process/process.rs | 25 ++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'crates/shirabe-external-packages/src/symfony/process/process.rs') diff --git a/crates/shirabe-external-packages/src/symfony/process/process.rs b/crates/shirabe-external-packages/src/symfony/process/process.rs index caf8aa1..3550f09 100644 --- a/crates/shirabe-external-packages/src/symfony/process/process.rs +++ b/crates/shirabe-external-packages/src/symfony/process/process.rs @@ -1670,13 +1670,20 @@ impl Process { } fn get_default_env(&self) -> IndexMap { - let env = php::getenv_all(); - let server = php::php_server(); + let env: IndexMap = php::getenv_all() + .map(|(k, v)| { + ( + k.to_string_lossy().into_owned(), + v.to_string_lossy().into_owned(), + ) + }) + .collect(); + let server = php::PHP_SERVER.lock().unwrap(); // non-Windows: array_intersect_key($env, $_SERVER) ?: $env let mut intersect: IndexMap = IndexMap::new(); for (k, v) in &env { - if server.contains_key(k) { + if server.get(k).is_some() { intersect.insert(k.clone(), PhpMixed::String(v.clone())); } } @@ -1689,7 +1696,17 @@ impl Process { }; // $_ENV + env_map - let mut result = php::php_env(); + let mut result: IndexMap = php::PHP_ENV + .lock() + .unwrap() + .get_all() + .map(|(k, v)| { + ( + k.to_string_lossy().into_owned(), + PhpMixed::String(v.to_string_lossy().into_owned()), + ) + }) + .collect(); for (k, v) in env_map { result.entry(k).or_insert(v); } -- cgit v1.3.1