2012-05-26 39 views
5

有些腳本需要在環境中設置某些路徑才能運行。我想編輯我的路徑以包含這些位置。 這些是我想要添加到我的exec路徑的位置。如何在php中修改exec使用的路徑

$JAVA_HOME = "/usr/java/jdk1.6.0_31"; 
$ANT_HOME = "/usr/apache-ant-1.8.3"; 
$ANT_BIN = "$ANT_HOME/bin"; 
$JAVA_BIN = "$JAVA_HOME/bin"; 
$ADDPATH=$JAVA_HOME . ":" . $ANT_HOME . ":" . $ANT_BIN .":" . $JAVA_BIN . ":" . $PATH; 

,我用運行putenv

putenv("JAVA_HOME=" . $JAVA_HOME); 
putenv("ANT_HOME=" . $ANT_HOME); 
putenv("ANT_BIN=" . $ANT_BIN); 
putenv("JAVA_BIN=" . $JAVA_BIN); 
putenv("PATH=".$_ENV["PATH"].":".$ADDPATH); 

但是當我做了

echo getenv("PATH"); 

我得到

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

我有兩個疑問: (a)如何做我將路徑變量設置爲t他看重我想要 (b)有沒有一種方法(或位置)添加這些位置成爲服務器環境的一部分(在php.ini或apache配置中),而不是使用腳本進行這些編輯。

回答

1

嘗試使用apache_setenv()apache_getenv()

+0

謝謝,回答我的第一個查詢。不過,我想使用更優雅的解決方案從設置文件編輯服務器配置,而不是在每個腳本中更改它。 –

1

在PHP中設置環境變量,讓我參考官方文檔運行putenv:

添加設置服務器環境。 環境變量 僅在當前請求期間存在。在 請求結束時,環境恢復到其原始狀態。

設置某些環境變量可能是一個潛在的安全問題 違規。 safe_mode_allowed_env_vars指令包含一個由 逗號分隔的前綴列表。在安全模式下,用戶可能只會更改名稱以此指令提供的前綴 開頭的環境變量。默認情況下,用戶將只能設置 以PHP_開頭的環境變量(例如PHP_FOO = BAR)。注意: 如果這個指令是空的,PHP將讓用戶修改ANY 環境變量!

safe_mode_protected_env_vars指令包含逗號分隔的 環境變量列表,最終用戶將無法使用putenv()更改 。即使 safe_mode_allowed_env_vars設置爲允許更改它們,這些變量也會受到保護。

我認爲這絕對不是要走的路,如果不是非常特殊的情況;在httpd配置另一方面設置的環境變量是很容易的,使用模塊mod_envSetEnv指令:

SETENV指令

Description: Sets environment variables 
Syntax:  SetEnv env-variable value 
Context:  server config, virtual host, directory, .htaccess 
Override:  FileInfo 
Status:  Base 
Module:  mod_env 

設置的內部環境變量,然後將其提供給Apache HTTP服務器 模塊,並傳遞給CGI腳本和SSI頁面。通過該指令設置

SetEnv SPECIAL_PATH /foo/bin 

內部環境變量最初請求處理指令 被運行,例如訪問控制和URI到文件名映射後進行設置。如果您正在設置的環境變量 是輸入到早期 處理階段(如RewriteRule指令)的輸入,則應該使用SetEnvIf設置環境變量 。

啊,他們幾乎可以從主httpd.conf到虛擬主機配置,甚至在獲得FileInfo覆蓋後的htaccess中,它們變得非常通用。

參考文獻:

+0

我能夠使用@bsdnoobz答案獲取腳本路徑進行更改。所以路徑需要從Apache2改變,因爲我沒有在安全模式下運行。我去了apache2目錄,但無法找到mod_env文件。該文件顯示了我想要做的事情。但你能告訴我該怎麼做。即將條目添加到Apache設置文件。我對apache2設置比較陌生。 –

+0

這取決於你的os/httpd分佈。一般來說,首先要做的是檢查_LoadModule module_env_是否在_httpd.conf_ apache主配置文件中。如果是,則模塊已加載並處於活動狀態。然後,如果你希望env變量在整個apache安裝中可用,請將該指令放在_httpd.conf_中;如果你希望它只適用於某個網站,請將其放入_VirtualHost_;或者,在將_AllowOverride FileInfo_授予相關VirtualHost之後,您可以將其放入.htaccess文件中。在這裏閱讀有關htaccess:http://httpd.apache.org/docs/2.2/howto/htaccess.html –

+0

我啓動了phpinfo,它告訴我mod_env已加載到我的服務器上。接下來,我去到Apache的httpd.conf和編輯' 選項無 的AllowOverride無 訂單拒絕,允許 所有 '拒絕爲' 選項無 SETENV PATH /usr/java/jdk1.6.0_31 :/usr/apache-ant-1.8.3:/usr/apache-ant-1.8.3/bin:/usr/java/jdk1.6.0_31/bin AllowOverride無 命令拒絕,允許 拒絕全部 '並重新啓動apache,但我無法找到反映更改的路徑。我錯過了什麼 –