簡體   English   中英

如何在PHP環境之間更改不同的配置設置?

[英]How to change different configuration settings between environments in PHP?

我有一些通過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 reset --hard
  • 更改版本B的路徑

您正在嘗試在開發和運行之間運行不同的代碼庫,不建議這樣做-它們應該相同。 我解決此問題的方法是使用環境變量來指定應加載幾個配置文件中的哪個。

在我的Apache vhost中,我執行以下操作:

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;
}

然后,可以在配置文件中使用該環境名稱以include ,或從鍵入環境的單個數組中檢索值。

我通常將特定於環境的設置保存在名為configs/的文件夾中,但是您可以將其存儲在應用程序中任何有意義的位置。 因此,例如,您可以擁有以下文件:

// This is /configs/local.php

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

然后,您可以執行此操作(假設前端控制器在項目中位於一個層次深處,例如/web/index.php ):

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

然后,您可以在$config訪問相應的每個環境設置。

達到此目的的純git方法將是filter 過濾器很酷,但經常被忽略。 將過濾器視為可以完全控制的git關鍵字擴展方式。

例如,文件的簽入版本將如下所示:

define('__ROOT__', 'MUST_BE_REPLACED_BY_SMUDGE');

然后設置兩個過濾器:

  • 在本地計算機上,您將設置一個smudge過濾器來替換
    'MUST_BE_REPLACED_BY_SMUDGE'

    $_SERVER["DOCUMENT_ROOT"].'/mywebsite'

  • 在您的服務器上,您將設置一個smudge過濾器來替換
    'MUST_BE_REPLACED_BY_SMUDGE'

    $_SERVER["DOCUMENT_ROOT"].'/../dev.my-website.tld/Modules/'

  • 在兩台機器上, clean過濾器都會將線路恢復為
    define('__ROOT__', 'MUST_BE_REPLACED_BY_SMUDGE');

有關過濾器的更多信息,可以在此答案Git Book中找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM