$_SERVER und $_ENV

Geschätzte Lektüre: 7 Minuten 312 Ansichten

Stellen Sie sich vor, Sie betreten ein Restaurant (Ihre PHP-Anwendung). Der Kellner ($_SERVER) weiß alles über den aktuellen Besuch – wer Sie sind, wo Sie sitzen, was Sie bestellt haben. Der Küchenchef ($_ENV) hingegen kennt die geheimen Rezepte und Zutaten, die hinter den Kulissen verwendet werden. Beide sind entscheidend für ein reibungsloses Erlebnis, aber sie haben unterschiedliche Aufgaben.

$_SERVER – Der Informationslieferant über die aktuelle Anfrage

Was ist $_SERVER?

$_SERVER ist ein spezielles Array in PHP, das Informationen über den Server und die aktuelle Anfrage enthält. Es wird automatisch von PHP gefüllt und ist in jedem Skript verfügbar.

Wichtige $_SERVER-Elemente mit Beispielen

<?php
// Die URL der aktuellen Seite
echo "Sie besuchen: " . $_SERVER['REQUEST_URI'] . "<br>";
// Beispielausgabe: /produkte/index.php

// Die Methode der Anfrage (GET, POST, etc.)
echo "Anfragemethode: " . $_SERVER['REQUEST_METHOD'] . "<br>";
// Beispielausgabe: GET

// Die IP-Adresse des Besuchers
echo "Besucher-IP: " . $_SERVER['REMOTE_ADDR'] . "<br>";
// Beispielausgabe: 192.168.1.1

// Der User-Agent (Browser-Informationen)
echo "Browser: " . $_SERVER['HTTP_USER_AGENT'] . "<br>";
// Beispielausgabe: Mozilla/5.0 (Windows NT 10.0; Win64; x64)...

// Der Server-Name
echo "Server: " . $_SERVER['SERVER_NAME'] . "<br>";
// Beispielausgabe: www.meineseite.de

// Das Root-Verzeichnis des Projekts
echo "Dokumenten-Root: " . $_SERVER['DOCUMENT_ROOT'] . "<br>";
// Beispielausgabe: /var/www/html
?>

Praxisbeispiel: Eine einfache Protokollierung

<?php
// Protokolliere Besucherinformationen
$log_entry = date('Y-m-d H:i:s') . " - " . 
              $_SERVER['REMOTE_ADDR'] . " - " . 
              $_SERVER['REQUEST_URI'] . "\n";

file_put_contents('access.log', $log_entry, FILE_APPEND);
?>

$_ENV – Die Umgebungsvariablen

Was ist $_ENV?

$_ENV ist ein Array, das Umgebungsvariablen enthält. Diese Variablen sind typischerweise außerhalb des PHP-Skripts definiert (z.B. in der Server-Konfiguration oder .env-Dateien) und enthalten konfigurationsspezifische Daten.

Unterschied zwischen $_SERVER und $_ENV

  • $_SERVER: Informationen über die aktuelle Anfrage und den Server
  • $_ENV: Konfigurationseinstellungen, die unabhängig von der Anfrage sind

$_ENV verwenden

Zuerst müssen Sie sicherstellen, dass PHP Umgebungsvariablen liest. In modernen PHP-Versionen ist dies oft standardmäßig aktiviert.

Beispiel einer .env-Datei:

DB_HOST=localhost
DB_NAME=meine_datenbank
DB_USER=benutzer
DB_PASS=geheim

PHP-Code zur Verwendung:

<?php
// Mit der phpdotenv-Bibliothek (empfohlen für Projekte)
require 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

// Oder manuell (nicht empfohlen für Produktion)
// $env = parse_ini_file('.env');
// foreach ($env as $key => $value) {
//     $_ENV[$key] = $value;
// }

// Auf Umgebungsvariablen zugreifen
$db_host = $_ENV['DB_HOST'];
$db_name = $_ENV['DB_NAME'];

echo "Verbinde zu Datenbank: " . $db_host . "/" . $db_name;
?>

Wichtige Anwendungsfälle für $_ENV

  1. Datenbankzugangsdaten: Nie im Code hardcoden!
  2. API-Schlüssel: Sicher aufbewahren
  3. Konfiguration für verschiedene Umgebungen (Entwicklung/Produktion)
  4. Sensible Informationen, die nicht in Versionskontrolle gehören

Sicherheitshinweise

01. Vertrauen Sie niemals $_SERVER-Daten blind – sie können manipuliert werden

// Unsicher:
$admin = ($_SERVER['REMOTE_ADDR'] == '192.168.1.100');

// Besser:
$trusted_ips = ['192.168.1.100', '127.0.0.1'];
$admin = in_array($_SERVER['REMOTE_ADDR'], $trusted_ips);

02. Schützen Sie .env-Dateien
• Nie in Versionskontrolle hochladen (in .gitignore aufnehmen)
• Richtige Berechtigungen setzen

03. Sensible $_ENV-Daten nicht ausgeben

// Gefährlich:
echo "DB Passwort: " . $_ENV['DB_PASS'];

// Debugging nur in Entwicklung:
if ($_ENV['APP_ENV'] == 'development') {
    var_dump($_ENV);
}

Fortgeschrittene Techniken

Dynamische Konfiguration basierend auf der Umgebung

<?php
// In .env:
// APP_ENV=production

if ($_ENV['APP_ENV'] == 'production') {
    ini_set('display_errors', 0);
    error_reporting(0);
} else {
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
}
?>

Eigene Server-Variablen setzen (Apache .htaccess)

SetEnv DB_HOST localhost
SetEnv DB_NAME meine_db

Nginx Konfiguration

location ~ \.php$ {
    fastcgi_param DB_HOST localhost;
    fastcgi_param DB_NAME meine_db;
    include fastcgi_params;
}

De wichtigsten Punkte

Feature$_SERVER$_ENV
ZweckInformationen über die aktuelle AnfrageKonfiguration und Umgebungsvariablen
QuelleWird von PHP/Webserver gesetztWird vom System oder .env-Dateien geladen
Typische InhalteIPs, URLs, BrowserinfoDB-Zugänge, API-Keys, Einstellungen
SicherheitKann manipuliert werden – validieren!Sensibel – muss geschützt werden
Beispiel$_SERVER[‚REMOTE_ADDR‘]$_ENV[‚DB_PASSWORD‘]

Dieses Dokument teilen

$_SERVER und $_ENV

Oder Link kopieren

INHALT

Abonnieren

×
Cancel