Lý do là:
Các giá trị môi trường bạn nhận được từ getenv()[PHP]
(hàm php) khác với môi trường bạn truy vấn bằng getenv()[C]
(hàm C lib). Cái gì getenv()[PHP]
đang kiểm tra với sapi đã đăng ký để tìm khớp ( http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999
).
Apache2 sapi thực hiện điều này thông qua ngữ cảnh môi trường riêng của nó ( http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), không phải là môi trường OS tiêu chuẩn từ chính quá trình apache.
CHỈ khi không có kết quả phù hợp nào được tìm thấy, nó sẽ kiểm tra tại môi trường của quá trình thực tế. Vì vậy, đây là lý do tại sao getenv()[PHP]
trả về một giá trị, nhưng getenv()[C]
không.
Bây giờ, "hack" cũng đơn giản:putenv()[PHP]
, lưu trữ khóa / giá trị đã cho trong môi trường của quá trình đang chạy, đó là lý do tại sao có thể tìm thấy khóa / giá trị này sau này bằng getenv()[c]
.