【问题标题】:PHP - Different MySQL Connections for Multiple Deployment EnvironmentsPHP - 多个部署环境的不同 MySQL 连接
【发布时间】:2017-03-03 02:38:28
【问题描述】:

我有一个用 PHP 编写的 api,用于支持我的 Android 应用程序的后端服务。我正在设置不同的环境——开发、登台、生产——每个都有自己的数据库。 API 对其各自的 MySQL 数据库执行查询,并且一切都在开发中运行良好。

我的问题是关于在每个环境中为 api 处理不同数据库连接的正确技术?有没有比在从开发部署到登台之前手动更改数据库更简单的方法来更改我的 php->mysql 连接使用的数据库?

我来自 Android 环境,所以马上想到的是 Gradle 的构建风格以及它如何允许根据您想要的特定构建变体使用不同的代码。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    我认为这是 Apache environment variables 的一个很好的用例,可以在 httpd.conf 文件(或 .htaccess 文件)中设置。

    基本上,你可以这样:

    SetEnv DATABASE_NAME "MyDB"
    

    在您的 httpd.conf 文件中,然后在 PHP 中使用:

    $_SERVER['DATABASE_NAME']
    

    访问它。

    一般来说,将特定于环境的内容保留在您的代码之外是一种很好的做法,这样您的代码就更具可移植性。你的案例就是一个很好的例子。

    编辑(rpm): 修改httpd.conf文件后一定要重启apache。我在让这个答案正常工作时遇到问题,但重新启动 Apache 可以解决所有问题。

    【讨论】:

    • 这正是我想要的。谢谢!
    • @Barmar 我无法让它工作。在我的 httpd.conf 文件中,我有 SetEnv ENVVAR “hello”,而我的 php 文件包含 <?php echo $_SERVER[‘ENVVAR’]; ?>。当我到达端点时,这应该将变量打印给邮递员,但我什么也没得到。想法?
    • @rpm 为什么要找我帮忙,这是杰森的回答。
    • @rpm 不要使用大引号。编辑程序和配置文件时,请在文本编辑器中关闭“智能引号”。
    • @Barmar 对意外提及感到抱歉...无论如何,替换花引号并没有改变任何东西。
    【解决方案2】:

    我们所做的是将数据库连接参数放在单独的包含文件中,例如

    $db_host = "xxx";
    $db_user = "xxx";
    $db_password = "xxx";
    $db_database = "xxx";
    

    那么其他脚本就可以使用了

    require_once('db_params.php');
    

    并在建立数据库连接时使用这些变量。

    那我们只是在不同的环境中使用不同的脚本内容。

    【讨论】:

    • 当您无法访问/编辑配置文件时,这是一个很好的解决方案。
    • 对于不同的应用程序,我们也有不同的服务器和用户名,我们有只读用户和读写用户。我们有不同的包含文件用于不同的目的,使用服务器环境变量可能会失控。
    • 我不确定我是否同意,但这可能只是口味不同。使用环境变量,您可以为每个域甚至每个目录设置它们。
    • @Jason 我们可以在同一个目录下有不同的需求。一些网页只显示数据,因此它们使用只读凭据,而其他页面更新并使用读写凭据。即使在单个脚本中,它也可能需要访问不同的数据库服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2015-07-29
    • 2013-01-27
    相关资源
    最近更新 更多