Signatur
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
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 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";
}
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";
// 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.