php - 如何在 PHP 环境之间更改不同的配置设置?

标签 php git gulp

我有一些通过 AJAX 调用调用的 php 文件。它们都有一个指向我的 config.php 的 URL。现在我遇到的问题是,当我在服务器上部署新版本时,我总是必须手动更改该配置文件的 URL。

本地路径:

define('__ROOT__', $_SERVER["DOCUMENT_ROOT"].'/mywebsite');

服务器路径:

define('__ROOT__', $_SERVER["DOCUMENT_ROOT"].'/../dev.my-website.tld/Modules/');

我想跟踪所有这些 PHP 文件的更改。我正在寻找自动更改此路径的解决方案。

例如 这是我当前的工作流程:

本地环境:

  • (路径版本 A)
  • 更改代码
  • git add、git commit、git merge、git Push 到我的服务器

服务器:

  • git重置--硬
  • 更改版本 B 的路径

最佳答案

您正在尝试在开发和实际运行之间运行不同的代码库,这是不建议的——它们应该是相同的。我解决这个问题的方法是使用环境变量来指定应该加载几个配置文件中的哪一个。

在我的 Apache 虚拟主机中,我做了这样的事情:

SetEnv ENVIRONMENT_NAME local

然后我使用一个函数来读取环境名称:

function getEnvironmentName()
{
    $envKeyName = 'ENVIRONMENT_NAME';
    $envName = isset($_SERVER[$envKeyName]) ? $_SERVER[$envKeyName] : null;
    if (!$envName)
    {
        throw new \Exception('No environment name found, cannot proceed');
    }

    return $envName;
}

然后可以在配置文件中使用该环境名称来包含,或从环境中键入的单个数组中检索值。

我经常将特定于环境的设置保存在名为 configs/ 的文件夹中,但您可以将它们存储在应用程序中有意义的任何位置。例如,您可以拥有以下文件:

// This is /configs/local.php

return array(
    'path' => '/mywebsite',
    // As many key-values as you want
);

然后您可以执行此操作(假设您的前端 Controller 在项目中深一层,例如在 /web/index.php 中):

$root = dirname(__DIR__);
$config = include($root . '/configs/' . getEnvironmentName() . '.php');

然后,您将可以访问 $config 中适当的每个环境设置。

关于php - 如何在 PHP 环境之间更改不同的配置设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600408/

相关文章:

gulp - gulp.parallel() 或 gulp.series() 内的条件 gulp 任务

php - MySQL如何使用不同的约束查询多个表?

php - Zend Opcache 不缓存所有文件(CentOS 6.7 + Nginx 1.8.1 + PHP 7 + Laravel 5.1)

Git rebase 导致 pull request 在自动 merge 中失败

git - 当它说一个 git step 是 "1 ahead"是什么意思

Gulp 处理目录中的所有文件

javascript - Gulp sass 编译在启动时正常工作。但是,更改的文件将被排除

php - 为什么一个简单的 PHP 包含文件容易受到攻击

php - 如何仅在特定页面上显示 Wordpress 二级菜单?

git - 我应该排除 .gitignore 中的 Aurelia 脚本文件夹吗?