我有一个 PHP 应用程序,我想在 Linode 上的一个实例中托管暂存、演示和生产服务器。我遇到的挑战是为每个服务器加载不同的环境变量。
我在 /etc/apache2/sites-available/ 中创建了多个 .conf 文件,如下所示:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName stag.example.com
ServerAlias stag.example.com
DocumentRoot /var/www/example-app/public
ErrorLog /var/www/example-app/writable/logs/errors.stag.log
CustomLog /var/www/example-app/writable/logs/access.stag.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =stag.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
我已尝试为 /etc/profile.d/ 目录中的每个服务器创建包含所有环境变量的 .sh 文件,如下所示:
export ENV1="abc"
export ENV2="def"
但我不知道如何在 .conf 文件中加载该文件。我还尝试在 .conf 中明确设置 APP_ENV 变量(即SetEnv APP_ENV staging
)。然后我会检查 PHP 代码中的 APP_ENV 变量(即getenv("APP_ENV")
),并在此基础上,我可以读取正确的 .sh 文件并将该文件中的环境变量加载到 $_ENV 中。但是,由于某种原因,当我检索 PHP 代码中的所有环境变量时,APP_ENV 变量并未显示(即print_r getenv()
)。当我这样做时,只会列出 /etc/apache2/envvars 中设置的变量。
我是 Ubuntu 和 Linode 的新手(以前,我只使用托管服务器),所以我可能遗漏了一些简单的东西,所以如果您能提供任何帮助,我将非常感激。
答案1
PHP 环境变量与您的系统变量或 Apache 环境变量不同。
如果您想设置一个可以使用从您的 PHP 代码中检索的 APP_ENV 环境变量getenv("APP_ENV")
,您应该考虑在您的php.ini
文件中声明它。(这里有更好的解释:https://w3schools.in/php/environment-variables)
- 转到
/etc/php/XX/apache2/php.ini
(其中 XX 取决于您的 PHP 版本) - 添加变量(例如
APP_ENV = "PROD"
:) - 从你的 PHP 代码中读取它
getenv("APP_ENV"
)
这有帮助吗? 谨致问候。