PHP中環境變數的操作

2021-10-10 01:16:51 字數 2687 閱讀 6924

在 php 中,我們可以通過 phpinfo() 檢視到當前系統中的環境變數資訊(environment)。在**中,我們也可以通過兩個函式,檢視和修改相應的環境變數資訊。

在不傳引數的情況下,我們可以通過 getenv() 這個函式獲得所有的環境變數資訊。不過需要注意的是,在 cli 環境和 sapi 環境下它所返回的資訊是不一樣的。

print_r(getenv());

// cli

// array

// (

//     [user] => zhangyue

//     [logname] => zhangyue

//     [home] => /users/zhangyue

//     [shell] => /bin/zsh

//     [__cf_user_text_encoding] => 0x1f5:0x19:0x34

//     [tmpdir] => /var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/t/

//     [xpc_service_name] => 0

//     [xpc_flags] => 0x0

//     [oldpwd] => /users/zhangyue/mydoc/部落格文章

//     [pwd] => /users/zhangyue/mydoc/部落格文章/dev-blog/php/202006/source

//     [shlvl] => 1

//     [term_program] => vscode

//     [term_program_version] => 1.45.1

//     [lang] => en_us.utf-8

//     [colorterm] => truecolor

//     [vscode_git_ipc_handle] => /var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/t/vscode-git-a282fa5813.sock

//     [term] => xterm-256color

//     [_] => /usr/local/bin/php

//     [__kmp_registered_lib_9282] => 0x1138dc0f8-cafece1d-libomp.dylib

// )

// sapi nginx

// array

// (

//     [user] => zhangyue

//     [home] => /users/zhangyue

// )

如果 php 在諸如 fast cgi 之類的 sapi 中執行,則此函式將始終返回由 sapi 設定的環境變數的值,即使已使用 putenv() 來設定同名的本地環境變數。這個函式是有兩個引數的,不過它們都是選填的(php7以前必須填變數名)。第乙個引數是變數名,也就是可以返回具體的某乙個環境變數資訊。而第二個引數如果設定為 true 的話,僅返回本地環境變數(由作業系統或 putenv() 設定)。

echo getenv("home"), php_eol;

// /users/zhangyue

// nginx

print_r($_server);

echo getenv("request_method"), php_eol; // get

echo getenv("request_method", true), php_eol; //

在第二個引數不為 true 的情況下,我們可以通過 getenv() 獲得 \$_server 、$_env 中的所有內容,但是,如果第二個引數為 true 的話,那麼類似於 nginx 為我們新增的那些環境變數就無法獲取了。這就是第二個引數的作用,上面**中 request_method 就是 nginx 為我們新增的環境變數,所以第二條輸出語句就不會進行輸出。

設定環境變數的函式就比較簡單了,只有乙個引數,不過寫法是類似於 linux 中環境變數的設定寫法。

putenv("a=testa");

echo getenv("a"), php_eol;

echo getenv("a", true), php_eol;

對於 putenv() 的環境變數,getenv() 的第二個引數設定為 true 也是可以獲取到的。環境變數僅存活於當前請求期間。在請求結束時環境會恢復到初始狀態。

設定特定的環境變數也有可能是乙個潛在的安全漏洞。safe_mode_allowed_env_vars 包含了乙個以逗號分隔的字首列表。在安全模式下,使用者可以僅能修改用該指令設定的字首名稱的指令。預設情況下,使用者僅能夠修改以 php_ 開頭的環境變數(例如 php_foo=bar)。注意:如果此指令是空的,php允許使用者設定任意環境變數!

safe_mode_protected_env_vars 指令包含了逗號分隔的環境變數列表,使使用者最終無法通過 putenv() 修改。即使 safe_mode_allowed_env_vars 設定允許修改,這些變數也會被保護。

所以,在 php.ini 中,預設情況下 putenv() 是定義為危險函式的,也就是在 disable_functions 中需要刪除掉這個函式才能正常使用,如果要使用 composer 的話也必須要開啟這個函式才能正常使用。

測試**:

ROS中環境變數

ros自身工作空間的環境變數配置指令碼檔案setup.bash在 opt ros kinetic路徑下,我的ros版本是kinetic版本,所以此處是kinetic。我們建立的工作空間的環境變數配置指令碼檔案setup.bash就在上面我們說到的devel資料夾下。在 bashrc最後新增 ros空...

Linux系統中環境變數

先來介紹以下linu中的環境變數 linux 的變數可分為兩類 環境變數和本地變數 環境變數,或者稱為全域性變數,存在與所有的shell 中,在你登陸系統的時候就已經有了相應的系統定義的環境變數了。linux 的環境變數具有繼承性,即子shell 會繼承父shell 的環境變數。本地變數,當前she...

Linux中環境變數設定

1.顯示環境變數home echo home home redbooks 2.設定乙個新的環境變數hello export hello hello echo hello hello 3.使用env命令顯示所有的環境變數 env hostname redbooks.safe.org pvm rsh u...