gpt4 book ai didi

php - 如何在运行 CLI 和 Apache2Handler 时将系统环境变量导入 PHP?

转载 作者:IT王子 更新时间:2023-10-29 00:54:56 26 4
gpt4 key购买 nike

我的系统是 Ubuntu,我在 /etc/environment 中设置了我的环境变量。

如果我使用 CLI 运行 PHP 脚本 - 来自 /etc/environment 的环境变量被识别。

但是,如果我通过 http://domain/test.php(即 apache2handler)执行 PHP 脚本相同的脚本打印出 NULL,这意味着未加载来自 /etc/environment 的环境变量。

我所做的修复是在 /etc/apache2/envvars 中添加变量,这解决了问题。

但这是两个不同的文件,因此必须保持同步。

如何让 PHP/Apache/etc/environment(系统)加载和识别环境变量?

编辑:澄清一下,当我说“未加载到 PHP”时,它意味着来自 /etc/environment 的变量未在 $_SERVER 中设置, $_ENVgetenv() 并且不存在于 $GLOBALS 中。换句话说,“没有加载到 PHP 中”。

最佳答案

我遇到了完全相同的问题。为了解决这个问题,我只是在 /etc/apache2/envvars 中找到了 /etc/environment

/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 虚拟主机配置文件和 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";
?>

关于php - 如何在运行 CLI 和 Apache2Handler 时将系统环境变量导入 PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13568191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com