web-dev-qa-db-fra.com

Peut-on créer un fichier configuration.php différent pour plusieurs environnements?

Nous avons une configuration de projet qui a trois branches git différentes (développement, mise en scène et production). Nous essayons de trouver le meilleur moyen de configurer (si possible) le fichier configuration.php pour chaque branche.

Une approche que nous avons adoptée a été de créer un constructeur sur le fichier configuration.php, de vérifier le $ _SERVER ['DOCUMENT_ROOT'] et de modifier la propriété pour chaque branche/environnement. Cela fonctionne jusqu'à ce que quelqu'un le modifie et l'enregistre, ce qui supprime le constructeur et le restaure à la structure par défaut de configuration.php.

Existe-t-il un moyen, sans pirater le coeur, d’avoir un fichier configuration.php spécifique à l’environnement ou est-ce le meilleur moyen de placer simplement le fichier configuration.php dans .gitignore?

2
sifu

Concernant la façon dont Joomla charge le fichier configuration.php dans index.php, à la ligne 29

if (file_exists(__DIR__ . '/defines.php'))
{
    include_once __DIR__ . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}

Vous pouvez créer un fichier define.php personnalisé dans le répertoire racine de Joomla, puis personnaliser la valeur "JPATH_CONFIGURATION", comme suit:

<?php
/**
 * @package    Joomla.Site
 *
 * @copyright  Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

define('_JDEFINES', 1); 
define('JPATH_BASE', dirname(__FILE__));

$branch = $_REQUEST["branch"];

// Global definitions
$parts = explode(DIRECTORY_SEPARATOR, JPATH_BASE);

// Defines.
define('JPATH_ROOT',          implode(DIRECTORY_SEPARATOR, $parts));
define('JPATH_SITE',          JPATH_ROOT);
define('JPATH_CONFIGURATION', JPATH_ROOT . DIRECTORY_SEPARATOR .'configurations' . DIRECTORY_SEPARATOR .$branch);
define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator');
define('JPATH_LIBRARIES',     JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries');
define('JPATH_PLUGINS',       JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins');
define('JPATH_INSTALLATION',  JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation');
define('JPATH_THEMES',        JPATH_BASE . DIRECTORY_SEPARATOR . 'templates');
define('JPATH_CACHE',         JPATH_BASE . DIRECTORY_SEPARATOR . 'cache');
define('JPATH_MANIFESTS',     JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests');

En créant

  • configurations/développement/configuration.php
  • configurations/staging/configuration.php
  • configurations/production/configuration.php

MISE À JOUR

Pour l'administrateur, vous devez créer un autre fichier define.php dans le répertoire/administrator.

<?php
/**
 * @package    Joomla.Administrator
 *
 * @copyright  Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

define('_JDEFINES', 1); 
define('JPATH_BASE', dirname(__FILE__));

$branch = $_REQUEST["branch"];

// Global definitions
$parts = explode(DIRECTORY_SEPARATOR, JPATH_BASE);
array_pop($parts);

// Defines
define('JPATH_ROOT',          implode(DIRECTORY_SEPARATOR, $parts));
define('JPATH_SITE',          JPATH_ROOT);
define('JPATH_CONFIGURATION', JPATH_ROOT . DIRECTORY_SEPARATOR .'configurations' . DIRECTORY_SEPARATOR .$branch);
define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator');
define('JPATH_LIBRARIES',     JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries');
define('JPATH_PLUGINS',       JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins');
define('JPATH_INSTALLATION',  JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation');
define('JPATH_THEMES',        JPATH_BASE . DIRECTORY_SEPARATOR . 'templates');
define('JPATH_CACHE',         JPATH_BASE . DIRECTORY_SEPARATOR . 'cache');
define('JPATH_MANIFESTS',     JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests');

define ('_ JDEFINES', 1); ligne empêche Joomla de charger le fichier includes/define.php.

$ branch peut être défini en ce qui concerne $ _REQUEST, le sous-domaine de capture ou ce que vous voulez.