如何在php中修改exec使用的路径

时间:2012-05-26 06:45:09

标签: php apache2

有些脚本需要在环境中设置某些路径才能运行。我想编辑我的路径以包含这些位置。 这些是我想要添加到我的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)如何将路径变量设置为我想要的值 (b)是否有一种方法(或位置)将这些位置添加为服务器环境的一部分(在php.ini或apache配置中),而不是使用脚本进行这些编辑。

2 个答案:

答案 0 :(得分:1)

尝试使用apache_setenv()apache_getenv()

答案 1 :(得分: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_env的{​​{1}}指令:

  

SetEnv指令

SetEnv
     

设置内部环境变量,然后Apache HTTP Server可以使用该变量   模块,并传递给CGI脚本和SSI页面。

     

实施例

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

此指令设置的内部环境变量是在大多数早期请求处理指令之后设置的   运行,例如访问控制和URI到文件名映射。如果   您正在设置的环境变量意味着尽早输入   处理阶段,如RewriteRule指令,你应该   而是使用SetEnvIf设置环境变量。

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

参考文献: