【问题标题】:Setting PHP variables in httpd.conf?在 httpd.conf 中设置 PHP 变量?
【发布时间】:2010-09-13 20:46:53
【问题描述】:

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

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

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

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

希望这是有道理的

非常感谢

伊恩

【问题讨论】:

  • 这不是一个好主意。至少,恕我直言。使用您的 VC,做一个标记并提交必要的更改并完成它。它会比某种服务器端配置更干净。
  • 我们每周发布 20 个版本,直到... 为什么您的建议是个好主意?
  • 考虑在 apache 之外运行的 shell 脚本也需要知道它们的环境。

标签: php apache


【解决方案1】:

是的……你可以这样做:

SetEnv DATABASE_NAME testing

然后在 PHP 中:

$database = $_SERVER["DATABASE_NAME"];

$database = getenv("DATABASE_NAME");

【讨论】:

  • 据我所知,它应该是 $_SERVER['DATABASE_NAME'] 而不是 $_ENV。在 php 5.2 debian 上对其进行了测试,变量没有插入 $_ENV 而是插入 $_SERVER
  • 看来你是对的。 $_ENV 在命令行上工作,但在 Apache 下运行时似乎没有填充。
  • 这听起来更像是 OP 要求的答案。接受的答案是覆盖设置。
【解决方案2】:

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

在 httpd.conf 中:

SetEnv database testing

在你的 PHP 中:

if (getenv('database') == 'testing') {

if ($_SERVER['database'] == 'testing') {

【讨论】:

  • 在 apache 2.4 中工作
【解决方案3】:

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

只需将 .htaccess 文件放入您的 htdocs 目录即可:

php_value name value

更多信息:

【讨论】:

  • 通过 htaccess 执行此操作听起来比 httpd.conf 更好。
  • 不同意;在 vhost 配置部分执行此操作会更好,因为这意味着您可以完全禁用 .htaccess,这对 apache 来说是一种性能提升,因为它不必为每个请求检查 .htaccess 文件。
  • 如果这仍然不起作用,请检查您的 httpd.conf 以获取 AllowOverride none 命令。花了 45 分钟试图弄清楚为什么我的 .htaccess 文件刚才被忽略了。
  • 以及如何在 PHP 中检索它?
【解决方案4】:

我不会设置环境变量,因为这在 PhpInfo() 等默认脚本输出中也可见;

只需在 htdocs 文件夹上方的 .htaccess 中使用 php_value 即可完成并且安全 :)

【讨论】:

    【解决方案5】:

    .htaccess 的问题在于它是代码库树的一部分。代码库树是 VC/SVN 的一部分。因此,本地/开发中的任何更改都会转移到生产中。在 httpd.conf 中保留 env 变量设置可以节省您小心不要意外覆盖 server vs dev 标志的工作。当然,除非您想使用 IP 地址或主机名,这两者都不是可扩展的方法。

    【讨论】:

    • 更不用说你也可以在定义VirtualHost时设置它。
    【解决方案6】:

    我也在研究这种类型的解决方案。我发现的是,在 Apache 下,您可以在 http.conf 中使用 SetEnv KeyName DataValue,在 IIS 中,您可以使用快速 CGI 设置 >> 编辑... >> 环境变量 >> ... 并添加 KeyName, DataValue

    这反过来又允许将 PHP $var = $_SERVER["KeyName"]; 设置为 DataValue 并根据需要在 IIS 和 Apache 下一致地使用。

    我知道这是一个奇怪的用例。我在工作中使用 WAMP,在家里使用 MAMP,因此能够以相同的方式工作真是太好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 2010-09-07
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多