对于基于Zend Framework的应用程序我用阿帕奇直升机SetEnv在.htaccess.我在测试,登台和生产服务器上使用它,如下所示:
SetEnv APPLICATION_ENVIRONMENT production
Run Code Online (Sandbox Code Playgroud)
在登台服务器上,我无法在PHP中读取此env var.然而,当我做了一个var_dump( $_ENV )在PHP我得到的价值,但关键是除了前面REDIRECT_成为
REDIRECT_APPLICATION_ENVIRONMENT
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会发生这种情况,以及如何防止这种情况发生?
我正在尝试使用.htaccess文件以下列方式设置apache环境变量:
SetEnv SERVER_KEY "qwerty"
Run Code Online (Sandbox Code Playgroud)
之后我优雅地重启我的apache web服务器:
apachectl graceful
Run Code Online (Sandbox Code Playgroud)
然后我在/ var/www/html中创建一个名为version.php的文件
<?php phpinfo() ?>
Run Code Online (Sandbox Code Playgroud)
并转到MYIPADDRESS/version.php进行检查,但我发现环境变量尚未设置.
以下是详细信息:操作系统:RHEL6 PHP版本:5.3.3 Apache版本:2.2.15(Red Hat)
我该怎么办?
更新: 我通过在服务器配置文件中将AllowOverride None更改为AllowOverride All解决了我的问题!
我有tox 2.9.1
$ tox --version
2.9.1 imported from /Library/Python/2.7/site-packages/tox/__init__.pyc
registered plugins:
tox-pyenv-1.1.0 at /Library/Python/2.7/site-packages/tox_pyenv.pyc
Run Code Online (Sandbox Code Playgroud)
文件结构和内容如下
$ tree .
.
??? setup.py
??? test_env.py
??? tox.ini
0 directories, 3 files
Run Code Online (Sandbox Code Playgroud)
setup.py
$ cat setup.py
from setuptools import setup
setup(name="Tox Testing")
Run Code Online (Sandbox Code Playgroud)
tox.ini
$ cat tox.ini
[tox]
envlist = py35
setenv =
XYZ = 123
[testenv]
deps=pytest
commands=py.test
Run Code Online (Sandbox Code Playgroud)
test_env.py
$ cat test_env.py
import os
def test_env():
assert os.getenv('XYZ') == 123
Run Code Online (Sandbox Code Playgroud)
当我运行tox命令时,我的测试失败了.
$ tox -v
using tox.ini: /private/tmp/testing/tox.ini
using tox-2.9.1 from /Library/Python/2.7/site-packages/tox/__init__.pyc …Run Code Online (Sandbox Code Playgroud) 我不喜欢在document_root下存储全站点加密密钥和数据库访问信息,所以我在conf.d下使用Apache的SetEnv和php.ini文件将它们与代码库分开.最大的问题是,哪一个更好?apache vhost文件(SetEnv SITEKEY 'oinkoink!')或conf.d/xxx.ini文件(db_pass="oink?")内的环境变量?也许别的什么?
PROS n CONS:
SETENV:
+存储在DOCUMENT_ROOT外
+只有给定的vhost才能访问
-Visible with PHPINFO() - 黑客需要直接访问/上传利用到文件
get_cfg_var:
+存储在DOCUMENT_ROOT外部
+使用PHPINFO()不可见
- (非常糟糕)包含所有已定义的ini变量,因此每个vhost都可以通过(ini_get_all)查询它们,因此无法在共享vhost环境中使用
我在我的实时网站上设置了htpasswd身份验证,它运行良好,但我不想在开发环境工作时要求输入密码.
在我的httpd.conf文件中,我有:
SetEnv APP_ENV "development"
Run Code Online (Sandbox Code Playgroud)
在我的.htaccess档案中,我有:
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user
Run Code Online (Sandbox Code Playgroud)
我想知道是否有反正把有条件围绕htppasswd的东西,这样,当APP_ENV是development我没有得到提示输入密码.
这可能吗?
从我所读到的,setenv在csh和exportbash中都是等价的.但是,在与两者合作时,我发现了一些奇怪的问题.
当我打开putty并开始输入:
setenv TEMP yes
echo $TEMP //this give me "yes"
Run Code Online (Sandbox Code Playgroud)
然后我去打击并输入
echo $TEMP //this give me "yes" as well
Run Code Online (Sandbox Code Playgroud)
但是,如果我以相反的顺序进行,它将不会给出相同的结果.具体来说,当我先去bash并输入时
export TEMP=no
echo $TEMP //this give me "no"
Run Code Online (Sandbox Code Playgroud)
然后我回到csh并输入
echo $TEMP // this give me "Undefined Variable"
Run Code Online (Sandbox Code Playgroud)
它不应该给我"不"吗?我错过了什么吗?
谢谢!
我正试图改变LD_LIBRARY_PATH我的C++程序.我能够使用它来获取它的值getenv("LD_LIBRARY_PATH")并使用它设置它的值setenv()(我知道这是有效的,因为当我getenv("LD_LIBRARY_PATH")再次调用时,我得到更新的值),但是从程序内部改变它的值没有任何影响对它:我仍然收到此错误消息:
Failed to Load the shared library file
如果我在加载可执行文件或启动应用程序之前设置了值,它就可以正常工作.
通过在您的运行方案中设置OS_ACTIVITY_MODE环境变量,可以在 Swift 中隐藏 3rd 方库产生的过于冗长的日志disable- 如下图所示。
这将使NSLog您的应用程序的所有输出静音。我只想为某些呼叫禁用它。我尝试像这样设置环境变量:
setenv("OS_ACTIVITY_MODE", "disable", 1)
Run Code Online (Sandbox Code Playgroud)
而像这样
putenv(UnsafeMutablePointer<Int8>(mutating: ("OS_ACTIVITY_MODE=disable" as NSString).utf8String))
Run Code Online (Sandbox Code Playgroud)
通过调用验证环境已更改,print(ProcessInfo.processInfo.environment)但与在 XCode 运行方案中指定它不同,日志不受影响。
为什么它不起作用以及如何解决它?
我们正在运行一个Team City Build Server,并且希望编译一个Visual C ++项目。到目前为止,这很容易,因为我已经使用Windows SDK设置了Windows Build Agent,但是我们没有解决方案/项目文件。
而是使用CMake创建项目文件。CMake似乎有点笨(当未安装Visual Studio时无法生成解决方案),但是通过一些技巧,我可以做到这一点。然后可以使用MSBuild构建该解决方案。
问题来了。为了自动运行,我需要调用Windows SDK的SetEnv.cmd。而且我似乎无法自动找到它。它位于Windows SDK的bin子目录中,但是bin和root都不在路径中,并且%mssdk%环境变量由SetEnv.cmd设置,并且事先不可用!
将Windows SDK \ bin目录添加到PATH会导致SetEnv.cmd不再起作用(退出时显示类似The x86 compilers are not currently installed和的消息Jump target Set_x86 not found。
开始菜单链接正在使用Windows SDK目录作为工作目录来调用SetEnv.cmd。但是,如果我将根目录添加到PATH,则Bin \ SetEnv.cmd不可用。
如何自动找到SetEnv.cmd?即使将环境变量设置为setenv.cmd的完整路径也不起作用,并且当我将%mssdk%定义为sdk目录时,则调用%mssdk%\ bin \ SetEnv也不起作用。我还尝试定义%mssdk%,然后定义cd%mssdk%,然后调用bin \ SetEnv。此外,在所有这些情况下都找不到编译器。如果我在命令行上手动cd到根目录或bin目录,然后调用SetEnv.cmd,它也将不起作用。
虽然开始菜单链接可以正常工作。
作为记录,我目前的解决方案如下:
我创建了一个MSBuild文件,该文件在命令行上使用CMake创建了解决方案文件,然后使用MSBuild任务调用了创建的解决方案。可以从TeamCity轻松构建MSBuild文件,尽管我需要一些其他技巧来满足CMake愚蠢的寻找编译器的麻烦,尽管我不会调用它。并不是很令人满意,但是可以。
我需要SetEnvIf在我的.htaccess文件中使用.
我还需要满足多个条件,然后显示所需的URL.
这是我的代码:
SetEnvIf Remote_Host "^" press_flag=0
SetEnvIf Request_URI '/press/$' press_flag=1
SetEnvIf Cookie 'language\_uiAAAenglishBBB' press_flag=press_flag+1
SetEnvIf press_flag 2 Request_URI='Remote_Host/eng/test.html'
Run Code Online (Sandbox Code Playgroud)
说明:
press_flag为0. /press/,如果为true,我将'press_flag'设置为1.language\_uiAAAenglishBBB文本,如果为true,则我将press_flag值增加1.press_flag值是否为2,然后我相应地设置HTTP_HOST.但是,当我URL/press/在浏览器中打开时,它没有被重定向.
请帮助调试和修复此代码.
谢谢.