6

有些脚本需要在环境中设置某些路径才能运行。我想编辑我的路径以包含这些位置。这些是我要添加到我的执行路径的位置。

 $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)如何将路径变量设置为我想要的值(b)有没有办法(或位置)将这些位置添加为服务器环境的一部分(在 php.ini 或 apache 中configs ) 而不是使用脚本进行这些编辑。

4

2 回答 2

1

尝试使用apache_setenv()apache_getenv()

于 2012-05-26T07:05:41.303 回答
1

在php中设置环境变量,我参考putenv官方文档:

将设置添加到服务器环境。环境变量仅在当前请求期间存在。在请求结束时,环境将恢复到其原始状态。

设置某些环境变量可能是潜在的安全漏洞。safe_mode_allowed_env_vars 指令包含一个以逗号分隔的前缀列表。在安全模式下,用户只能更改名称以该指令提供的前缀开头的环境变量。默认情况下,用户只能设置以 PHP_ 开头的环境变量(例如 PHP_FOO=BAR)。注意:如果该指令为空,PHP 将允许用户修改任何环境变量!

safe_mode_protected_env_vars 指令包含一个以逗号分隔的环境变量列表,最终用户将无法使用 putenv() 进行更改。即使将 safe_mode_allowed_env_vars 设置为允许更改它们,这些变量也会受到保护。

我认为这绝对不是要走的路,即使不是非常特殊的情况;另一方面,在 httpd 配置中设置环境变量非常容易,使用 modulemod_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 Server 模块使用,并传递给 CGI 脚本和 SSI 页面。

例子

SetEnv SPECIAL_PATH /foo/bin

该指令设置的内部环境变量是在大多数早期请求处理指令运行后设置的,例如访问控制和 URI 到文件名的映射。如果您设置的环境变量是作为早期处理阶段的输入(例如 RewriteRule 指令),则应改为使用 SetEnvIf 设置环境变量。

啊,它们几乎可以无处不在,从主要的 httpd.conf 到虚拟主机配置,甚至在授予 FileInfo 覆盖时的 htaccess 中,它们都非常通用。

参考:

于 2012-05-26T07:05:49.710 回答