Answers:
正如其他人所说,您可以通过使用环境变量文件来实现。我将在此答案中提供更多详细信息,并显示其有效的证明。
此环境变量文件必须来自apachectl。在我的Ubuntu盒子上,此文件位于/etc/apache2/envvars。在RedHat上,此位置为/etc/sysconfig/httpd。在FreeBSD上,这是在/etc/rc.conf(我认为)中设置的。或者,您也可以在启动脚本(/etc/init.d/httpd或apachectl等)中设置此信息。但是,我认为最好尽可能保留启动脚本。最好的地方是在指定的环境变量脚本中。
验证此envvars文件的位置。在Ubuntu上,/etc/init.d/apache2ctl显示其来源/etc/apache2/envvars:
# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS='/etc/apache2/envvars'
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
. $APACHE_ENVVARS
fi
要查看变量,我使用了Perl printenv.cgi脚本,并在http://example.org/cgi-bin/printenv.cgi上提供了该脚本。该脚本向我显示了以下路径:
PATH = /usr/local/bin:/usr/bin:/bin
要更改这些变量,请编辑envvars文件:
$ sudo vim /etc/apache2/envvars
在此文件中修改您的PATH。在此示例中,我将追加/opt/local/bin到PATH。在某些情况下,您可能需要使用export PATH而不仅仅是PATH:
export PATH=$PATH:/opt/local/bin
重新启动Apache
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
在http://example.org/cgi-bin/printenv.cgi上查看结果,该结果现在表明PATH现在包含一个新元素:
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
如果上述方法不起作用,则可能发生异常情况。也许您的脚本正在忽略或覆盖PATH。
graceful,但这并未使更改生效。
在2.2上,无法使用Setenv设置PATH环境变量。
在我的系统上是/etc/apache2/envvars。
PATH
您可以在start()初始化脚本的功能中进行设置,如下所示:
start() {
echo -n $"Starting $prog: "
check13 || exit 1
export PATH=${PATH}:/var/ossec/bin
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
创建一个Perl脚本以列出所有环境变量:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
将其放入/var/www/cgi-bin,然后检查http://domain.com/cgi-bin/env.cgi,您将看到以下内容:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
在具有Apache 2.4.x的RedHat上,--prefix=/usr --enable-layout=RedHat该文件是通过envvars文件从源代码编译的/usr/sbin/envvars。我可以确认在该文件中设置了适当的PATH后,Apache和PHP便意识到了这一点。
我使用与Stefan Lasiewski相同的方法来确定这一点。对于Apache 2.4.12,该/usr/sbin/envvars文件位于的第49行/usr/sbin/apachectl。
/usr/sbin/apachectl提到的/etc/sysconfig/httpd内容包含:«该文件不再用于为httpd进程配置其他环境变量。它已由systemd代替。» paste.debian.net/361218
使用任何喜欢的编辑器编辑Apache2 plist文件(例如,使用vim):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
将以下内容添加到plist文件中:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
如果EnvironmentVariables密钥已经存在,只需添加
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
到 <dict>
注意:对于Mac OSX 10.11(EL Capitan)或更高版本,需要csrutil disable在重新启动并单击CMD + R后在Terminal中运行命令,然后才能编辑此文件。
重新启动Apache2
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
在我的Apache2系统上,我发现很多访问者只想掠夺我精心编译的表情符号/表情符号集合(严重!),因此我决定使用随机生成的符号链接到目录路径,该链接将作为Apache2变量,几乎不可能共享链接。
因此,cron每隔30分钟运行一个perl脚本,该脚本将重写.htaccess文件并包含SetEnv,如下所示:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
然后,在我的PHP页面的顶部,我将像这样读取变量,然后在页面的后面,将使用该变量来构建通往适当笑脸的路径:
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
为我工作,希望对您有所帮助!
PATH