Alasannya begini:
Nilai lingkungan yang Anda dapatkan dari getenv()[PHP] (fungsi php) berbeda dari lingkungan yang Anda kueri dengan getenv()[C] (fungsi C lib). Apa getenv()[PHP] tidak, sedang memeriksa dengan sapi terdaftar untuk kecocokan (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999
).
Apache2 sapi melakukan ini melalui konteks lingkungannya sendiri (https://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), bukan lingkungan OS standar dari proses Apache itu sendiri.
HANYA ketika tidak ada kecocokan yang ditemukan, itu akan memeriksa lingkungan proses yang sebenarnya. Jadi inilah mengapa getenv()[PHP] mengembalikan nilai, tetapi getenv()[C] tidak.
Sekarang, "peretasan" juga sederhana:putenv()[PHP] , menyimpan kunci/nilai yang diberikan di lingkungan proses yang sedang berjalan, oleh karena itu dapat ditemukan nanti oleh getenv()[c] .