如何使环境变量可用于 Apache,作为服务启动?

ioa*_*.th 6 php apache environment-variables

我知道添加一些环境变量 to/etc/environment将使它们在系统范围内可用,将它们添加到/etc/profile~/.bashrc或等效的,将使特定用户可用......然而,所有这些都适用于交互式会话。当 Apache 作为systemd服务启动时,它是一个非交互式会话,因此它看不到那些环境变量。我可以让 Apache 解析一个.env包含以下行的文件吗

env1=foo
env2=bar
...
Run Code Online (Sandbox Code Playgroud)

然后可以在我的 PHP 代码中使用$_SERVER['foo']等访问它们。当然,我也想为其他systemd服务实现相同的功能,那么是否有任何特定文件为服务提供 env 变量?

Mat*_*aly 4

您可以在站点的 Apache 配置文件中使用SetEnv指令来设置该站点的环境变量,如下所示:

SetEnv DATABASE_NAME foo
Run Code Online (Sandbox Code Playgroud)

这需要进入<VirtualHost>指令内部。

重新启动服务器后,应该可以通过$_ENVsuperglobal 或getenv()访问此数据。这种方法的缺点是,如果您的应用程序包含任何不是由 Apache 执行的内容,例如队列工作程序或控制台命令,它将无法访问相同的变量,除非您将它们复制到适当的位置(例如您的应用程序)。.bashrc)。

或者您可以使用像DotEnv这样的库。