在httpd.conf中设置PHP变量?

Pol*_*nby 19 php apache

我想基于每个虚拟主机自动更改我的数据库连接设置,这样我就不必编辑任何PHP代码,因为它从暂存转移到实时但访问不同的数据库.这是在一个专用服务器上.

所以我想知道,我可以在httpd.conf中设置一个PHP变量或常量作为vhost定义的一部分,然后该站点可以自动将其自身指向测试数据库吗?

$database = 'live';
if (some staging environment variable is true) {
    $database = 'testing'; // and not live
}
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的,我想在这种情况下我可以安全地检查我正在运行的主机名,但我想要一些不那么脆弱的东西

希望这是有道理的

非常感谢

伊恩

JW.*_*JW. 74

是的......你可以这样做:

SetEnv DATABASE_NAME testing
Run Code Online (Sandbox Code Playgroud)

然后在PHP中:

$database = $_SERVER["DATABASE_NAME"];
Run Code Online (Sandbox Code Playgroud)

要么

$database = getenv("DATABASE_NAME");
Run Code Online (Sandbox Code Playgroud)

  • 这听起来更像OP要求的答案.已接受的答案适用于覆盖设置. (7认同)
  • 据我所知,它应该是 $_SERVER['DATABASE_NAME'] 而不是 $_ENV。在 php 5.2 debian 上测试了它,变量没有插入到 $_ENV 中而是插入到 $_SERVER 中 (2认同)

Chr*_*yer 16

您可以设置环境变量并使用PHP检索它.

在httpd.conf中:

SetEnv database testing
Run Code Online (Sandbox Code Playgroud)

在你的PHP中:

if (getenv('database') == 'testing') {
Run Code Online (Sandbox Code Playgroud)

要么

if ($_SERVER['database'] == 'testing') {
Run Code Online (Sandbox Code Playgroud)


小智 12

您是否尝试过使用.htaccess文件?您可以使用它覆盖php.ini值.

只需将.htaccess文件放入htdocs目录:

php_value name value
Run Code Online (Sandbox Code Playgroud)

更多信息:

  • 不同意; 在vhost配置部分中执行此操作更好,因为这意味着您可以完全禁用.htaccess,这是apache的性能提升,因为它不必检查每个请求的.htaccess文件. (15认同)