web-dev-qa-db-fra.com

CodeIgniter3: Pourquoi $ _SERVER ['CI_ENV'] serait-il jamais défini en premier lieu?

Je vois que dans leur installation par défaut, leur index.php a ceci:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

Pourquoi serait CI_ENV ever déjà être défini dans le $_SERVER tableau?

25
dsdsdsdsd

Comme Oliver l'a décrit; c'est un cas d'utilisation spéciale pour plusieurs environnements. Répartir le développement, les tests et la production au moyen de .htaccess avant même d'arriver au code. Pour configurer ceci:

Développement (Localhost)

<IfModule mod_env.c>
    SetEnv CI_ENV development
</IfModule>

Test (votre serveur local)

<IfModule mod_env.c>
    SetEnv CI_ENV testing
</IfModule>

Production (serveur distant)

<IfModule mod_env.c>
    SetEnv CI_ENV production
</IfModule>

Vous avez raison de penser que cela ne changera jamais à moins d'une intervention manuelle. Il n'y a pas beaucoup de documentation à ce sujet:

"Cette variable de serveur peut être définie dans votre fichier .htaccess ou dans la configuration Apache à l'aide de SetEnv. D'autres méthodes sont disponibles pour nginx et d'autres serveurs, ou vous pouvez supprimer complètement cette logique et définir la constante en fonction de l'adresse IP du serveur."

Source: Utilisation de la constante d'environnement

41
MackieeE

Juste au cas où vous utilisez nginx, voici la configuration que vous devez ajouter à l'intérieur de la configuration des vhosts:

  server {

        location ~ \.php$ {
            fastcgi_param CI_ENV production;
        }

enregistrez et exécutez la vérification de la syntaxe nginx (juste pour éviter de me maudire):

nginx -t

si vous rencontrez des problèmes ou que vous ne trouvez pas le paramètre, vous pouvez suivre la réponse ci-dessous: Variables Nginx similaires à SetEnv dans Apache?

4
talsibony