it-swarm.com.de

Setzen Sie Application_ENV über die virtuelle Host-Konfiguration und lesen Sie diese ein PHP

Mir gefällt, wie das in Zend Framework funktioniert. Ich kann wissen, welche Umgebung ich gerade verwende, indem Sie die APPLICATION_ENV-Konstante in meinem Controller überprüfen. 

<VirtualHost *:80>
    #ServerName 
    #DocumentRoot

        SetEnv APPLICATION_ENV "development"

    # Directory
</VirtualHost>

Leider kann ich ZF in meinem aktuellen Projekt nicht verwenden. Wie kann ich diese Umgebungsvariable in meinem PHP Code überprüfen?

45

Da SetEnv der Wert für die Umgebung von Apache ist, können Sie ihn mit abrufen

oder nur

  • getenv - Ruft den Wert einer Umgebungsvariablen ab

Wenn Sie in einem ZF-Projekt auf public/index.php schauen, werden Sie sehen, dass ZF getenv verwendet:

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? 
                                  getenv('APPLICATION_ENV') : 
                                  'production'));

Eine häufig verwendete Alternative wäre, den Hostnamen von PHP zu lesen und die Konstante entsprechend zu definieren:

if(!defined('APPLICATION_ENV')) {
    if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
        define(APPLICATION_ENV, 'development');
    } else {
        define(APPLICATION_ENV, 'production');
    }
}

Auf diese Weise müssen Sie sich nicht auf die Umgebungseinstellungen verlassen.

43
Gordon

SetEnv definiert eine Umgebungsvariable.

Nachdem dies festgelegt wurde, (entweder in der Konfiguration Ihres Apache oder auf Systemebene), können Sie seinen Wert mit der Funktion getenv lesen:

echo getenv('APPLICATION_ENV');


Wenn Sie dies beispielsweise in Ihrer .htaccess-Datei verwenden:

SetEnv TEST glop

Sie können diesen Teil des PHP -Codes verwenden:

var_dump(getenv('TEST'));

Und du bekommst:

string 'glop' (length=4)
10
Pascal MARTIN

sie können auch über die Variable $_SERVER darauf zugreifen.

0
O_o lovesCandy

Ich hatte das gleiche Problem und löste es dann. Um das Problem zu lösen, müssen Sie alle Variablen in einem Apache-Init-Skript deklarieren. 

Ich verwende Apache für Centos und das Init-Skript befindet sich in /etc/init.d/httpd

Fügen Sie diesen Code hinzu, ändern Sie ihn jedoch entsprechend Ihrem spezifischen Fall. 

Oracle_HOSTNAME=ora11g.home.com; export Oracle_HOSTNAME
Oracle_BASE=/u01/app/Oracle; export Oracle_BASE
Oracle_HOME=$Oracle_BASE/product/11.2.0/db_1; export Oracle_HOME
Oracle_SID=ora11g; export Oracle_SID
Oracle_TERM=xterm; export Oracle_TERM
PATH=$Oracle_HOME/bin:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$Oracle_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$Oracle_HOME/JRE:$Oracle_HOME/jlib:$Oracle_HOME/rdbms/jlib;
export CLASSPATH

Das hat mein Problem gelöst. Ich hoffe das hilft. 

0
Firman Syah