我的系统是 Ubuntu, 并且已在中设置了环境变量/etc/environment
。
如果我使用 CLI* 运行 PHP 脚本- 可以识别环境变量。 */etc/environment
但是,如果我通过执行 PHP 脚本http://domain/test.php
(即 apache2handler
),则完全相同的脚本会打印出NULL,这意味着/etc/environment
不会加载环境变量。
我所做的修复是在其中添加变量/etc/apache2/envvars
,从而解决了该问题。
但这是两个不同的文件,然后必须保持同步。
如何使 PHP / Apache 从/etc/environment
(系统)加载并识别环境变量?
编辑:为了澄清的事情,当我说“没有加载到PHP”这意味着从变量/etc/environment
中没有设置$_SERVER
,$_ENV
,getenv()
和不存在$GLOBALS
。换句话说,“未加载到PHP中”。
我有完全一样的问题。为了解决这个问题,我只是源自/etc/environment
内部/etc/apache2/envvars
。
内容/etc/environment
:
export MY_PROJECT_PATH=/var/www/my-project
export MY_PROJECT_ENV=production
export MY_PROJECT_MAIL=support@my-project.com
内容/etc/apache2/envvars
:
# Load all the system environment variables.
. /etc/environment
现在,我可以在Apache Virtual Host配置文件和PHP中使用这些变量。
这是Apache虚拟主机的示例:
<VirtualHost *:80>
ServerName my-project.com
ServerAlias www.my-project.com
ServerAdmin ${MY_PROJECT_MAIL}
UseCanonicalName On
DocumentRoot ${MY_PROJECT_PATH}/www
# Error log.
ErrorLog ${APACHE_LOG_DIR}/my-project.com_error.log
LogLevel warn
# Access log.
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%m %>U%q\" %>s %b %D" clean_url_log_format
CustomLog ${APACHE_LOG_DIR}/my-project.com_access.log clean_url_log_format
</IfModule>
# DocumentRoot directory
<Directory ${MY_PROJECT_PATH}/www>
# Disable .htaccess rules completely, for better performance.
AllowOverride None
Options FollowSymLinks Includes
Order deny,allow
Allow from All
Include ${MY_PROJECT_PATH}/config/apache/inc.mime-types.conf
Include ${MY_PROJECT_PATH}/config/apache/inc.cache-control.conf
# Rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# Include all the common rewrite rules (for http and https).
Include ${MY_PROJECT_PATH}/config/apache/inc.rewriterules-shared.conf
</IfModule>
</Directory>
</VirtualHost>
这是如何使用PHP访问它们的示例:
<?php
header('Content-Type: text/plain; charset=utf-8');
print getenv('MY_PROJECT_PATH') . "\n" .
getenv('MY_PROJECT_ENV') . "\n" .
getenv('MY_PROJECT_MAIL') . "\n";
?>
问题内容: Java是否具有默认的“系统环境变量”,当我们设置它时将始终读取/附加它?/ etc似乎仅适用于TOMCAT / JBOSS等。 我不想通过Java系统属性(通过-Dprop1 = value1 -Dprop2 = value2传递)来设置它,因为它涉及shell / batch脚本。 它应可跨操作系统使用,例如Windows中的双击jar文件。 它应该可以在不同的JRE(Sun,IB
问题内容: JVM中的系统属性System.getProperties()和环境变量System.getenv()有什么区别? 问题答案: 我认为两者之间的区别归结为访问。系统环境变量可以由任何进程访问,而Java系统属性只能由添加到它们的进程访问。 另外,正如Bohemian所说,env变量是在OS中设置的(但是可以通过Java设置),而系统属性则作为命令行选项传递或通过设置setPropert
我无法从环境变量中获取值。有很多类似的问题。但没有一个对我有用 应用程序.属性 系统变量 但当我硬编码时,它工作得很好。 更新
问题内容: 如何在应用程序上下文中读取系统环境变量? 我想要类似的东西: 要么 取决于环境。 我的应用程序上下文中可以有这样的东西吗? 根据系统环境变量设置实际值的地方 我正在使用Spring 3.0 问题答案: 你接近:o)Spring 3.0添加了Spring Expression Language。你可以使用 结合应该可以解决你的问题。 还请注意@yiling的评论: 为了访问系统环境变量(
在创建Lambda函数时,通过GUI控制台加密环境变量并不难。我只是输入密钥值对,然后打开加密帮助程序,输入我的KMS密钥的ARN。这允许我加密值,所以它在被发送到存储之前被加密,如上图所示。 我要完成的是同样的事情,但假设您不是在GUI控制台中部署Lamba函数,而是通过CloudFormation模板,该模板将部署在CLI中。 下面是我在CloudFormation模板中指定相关参数的方法:
问题内容: 如何在Vue中访问在运行时而不是在构建过程中传递到容器的环境变量? 堆栈如下: VueCLI 3.0.5 docker Kubernetes 在stackoverflow和其他地方提出了建议的解决方案,以使用.env文件传递变量(并使用模式),但这是在构建时被烘焙到docker映像中的。 我想在运行时将变量传递给Vue,如下所示: 创建Kubernetes ConfigMap(我正确了