Start · Sprachen · PHP · Referenz · apache_note

apache_note

Funktion

Liest oder setzt Apache-Request-Notizen (<code>notes</code>-Tabelle) für die aktuelle HTTP-Anfrage.

seit PHP 4.0.0 Kategorie: misc

Signatur

apache_note(string $note_name, string $note_value = ""): string|false

Beschreibung

apache_note() ermöglicht den Zugriff auf die interne Notizen-Tabelle (notes table) des Apache-Webservers für die aktuelle HTTP-Anfrage. Diese Tabelle ist ein einfaches Schlüssel-Wert-Speichersystem, das Apache-Module untereinander nutzen, um Informationen innerhalb einer einzigen Anfrage auszutauschen.

Wird nur $note_name angegeben, liest die Funktion den aktuellen Wert des Eintrags und gibt ihn zurück. Wird zusätzlich $note_value übergeben, setzt die Funktion den Eintrag auf diesen Wert und gibt den vorherigen Wert zurück.

Typische Einsatzszenarien sind die Kommunikation zwischen PHP und Apache-Modulen wie mod_log_config (z. B. um benutzerdefinierte Werte ins Access-Log zu schreiben via %{note_name}n) oder mod_rewrite. So lassen sich etwa Benutzer-IDs, Transaktions-IDs oder Performance-Kennzahlen direkt ins Apache-Log einfließen, ohne separate Log-Mechanismen zu implementieren.

Wichtig: Diese Funktion steht nur zur Verfügung, wenn PHP als Apache-Modul (mod_php) betrieben wird. Bei Verwendung von FastCGI, PHP-FPM oder CLI ist die Funktion nicht verfügbar.

Parameter

Name Typ Default Beschreibung
$note_name Pflicht string Der Name (Schlüssel) der Notiz in der Apache-Notizen-Tabelle.
$note_value string "" Der neue Wert, der für den angegebenen Schlüssel gesetzt werden soll. Wird dieser Parameter weggelassen oder als leerer String übergeben, wird nur gelesen.

Rückgabewert

Typ
string|false
Beschreibung
Gibt bei Lesezugriff den aktuellen Wert der Notiz zurück, bei Schreibzugriff den vorherigen Wert. Existiert die Notiz nicht (Lesezugriff auf unbekannten Schlüssel), wird false zurückgegeben. Steht die Funktion nicht zur Verfügung (kein Apache-Modul-Modus), wird ebenfalls false zurückgegeben.

Beispiele

Benutzer-ID in Apache-Notiz schreiben (für Access-Log)

<?php
// Angenommen, der Benutzer ist eingeloggt und hat die ID 42
$userId = 42;

// Notiz setzen, damit Apache sie ins Log schreiben kann
// (Apache-Konfiguration: LogFormat "%{user_id}n" combined)
$previousValue = apache_note('user_id', (string)$userId);

if ($previousValue === false) {
    echo "Notiz 'user_id' wurde neu erstellt und auf '" . $userId . "' gesetzt.\n";
} else {
    echo "Vorheriger Wert: " . $previousValue . "\n";
    echo "Neuer Wert: " . $userId . "\n";
}
Notiz 'user_id' wurde neu erstellt und auf '42' gesetzt.

Notiz lesen, die von einem anderen Apache-Modul gesetzt wurde

<?php
// mod_rewrite oder ein anderes Modul könnte eine Notiz gesetzt haben
$rewriteFlag = apache_note('rewrite_flag');

if ($rewriteFlag !== false) {
    echo "Rewrite-Flag gesetzt: " . htmlspecialchars($rewriteFlag) . "\n";
} else {
    echo "Keine Notiz 'rewrite_flag' vorhanden.\n";
}
Keine Notiz 'rewrite_flag' vorhanden.

Request-Startzeit für Performance-Logging setzen

<?php
// Startzeit der PHP-Verarbeitung als Notiz speichern
$startTime = microtime(true);
apache_note('php_start_time', (string)$startTime);

// ... Anwendungslogik ...

$duration = microtime(true) - (float)apache_note('php_start_time');
apache_note('php_duration_ms', (string)round($duration * 1000, 2));

echo "Verarbeitungszeit: " . round($duration * 1000, 2) . " ms\n";
Verarbeitungszeit: 0.12 ms

// Wichtig · Fallstricke

Verfügbarkeit: apache_note() funktioniert ausschließlich im Apache-Modul-Betrieb (mod_php). Bei PHP-FPM, FastCGI oder der PHP-CLI wird die Funktion nicht definiert — ein Aufruf führt zu einem fatalen Fehler. Vor der Verwendung empfiehlt sich eine Prüfung via function_exists('apache_note').

Sicherheit: Werte, die aus Notizen gelesen und an den Browser ausgegeben werden, müssen wie alle externen Daten mit htmlspecialchars() oder ähnlichem sanitisiert werden, um XSS zu verhindern. Notizen, die aus HTTP-Request-Headern stammen (z. B. via mod_rewrite), sind als nicht vertrauenswürdig zu behandeln.

Unterschied zu apache_setenv(): Während apache_note() modulinterne Notizen verwaltet (nicht an Subprozesse weitergegeben), setzt apache_setenv() Umgebungsvariablen, die an CGI-Subprozesse weitergegeben werden.