Signatur
Beschreibung
apache_lookup_uri() veranlasst den Apache-Webserver, eine interne Teilanfrage (Sub-Request) für den angegebenen URI durchzuführen. Diese Funktion ist ausschließlich unter Apache verfügbar und funktioniert nur, wenn PHP als Apache-Modul (mod_php) betrieben wird.
Das zurückgegebene Objekt enthält alle Apache-internen Informationen über den URI, wie z. B. den Status-Code, den lokalen Dateisystempfad, den MIME-Typ, den Dateinamen, den Basisnamen sowie weitere interne Apache-Variablen. Dies ist besonders nützlich, um festzustellen, ob eine Ressource existiert oder wie sie vom Server aufgelöst wird, ohne einen vollständigen HTTP-Roundtrip durchführen zu müssen.
Typische Anwendungsfälle sind etwa das Prüfen von URI-Weiterleitungen, das Auflösen von Aliassen oder virtuellen Pfaden sowie das Ermitteln von Dateiinformationen auf Basis der Apache-Konfiguration (z. B. mod_rewrite-Regeln, Aliasse).
Achtung: Die Funktion steht nur im Apache-SAPI-Kontext zur Verfügung. Bei anderen Web-Servern oder CLI-Einsatz führt der Aufruf zu einem Fatal Error. Die zurückgegebenen Eigenschaften des Objekts können je nach Apache-Version und -Konfiguration variieren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Der URI oder Dateipfad, für den die interne Apache-Teilanfrage durchgeführt werden soll. Der Wert sollte ein gültiger, serverrelatiever URI sein (z. B. /pfad/zur/datei.php). |
Rückgabewert
status (HTTP-Statuscode), the_request, status_line, method, content_type, handler, uri, filename, path_info, args, boundary, no_cache, no_local_copy, allowed, send_bodyct, bytes_sent, byterange, clength, unparsed_uri, mtime und request_time. Im Fehlerfall wird false zurückgegeben.Beispiele
Grundlegende Verwendung: URI-Informationen abfragen
<?php
// Führt eine interne Apache-Teilanfrage für /index.php durch
$info = apache_lookup_uri('/index.php');
if ($info !== false) {
echo 'Status: ' . $info->status . "\n";
echo 'Dateiname: ' . $info->filename . "\n";
echo 'Content-Type: ' . $info->content_type . "\n";
echo 'URI: ' . $info->uri . "\n";
} else {
echo 'Teilanfrage konnte nicht durchgeführt werden.';
}
Prüfen ob eine Ressource vom Apache aufgelöst werden kann
<?php
// Prüft, ob ein URI vom Apache zu einer gültigen Ressource aufgelöst wird
function uriExistiertAufServer(string $uri): bool {
$info = apache_lookup_uri($uri);
// HTTP 200 OK bedeutet, die Ressource wurde erfolgreich aufgelöst
return $info !== false && $info->status === 200;
}
$uriZuPruefen = '/bilder/logo.png';
if (uriExistiertAufServer($uriZuPruefen)) {
echo "Der URI '{$uriZuPruefen}' wurde vom Apache erfolgreich aufgelöst.";
} else {
echo "Der URI '{$uriZuPruefen}' konnte vom Apache nicht aufgelöst werden.";
}
// Wichtig · Fallstricke
Verfügbarkeit: Diese Funktion ist ausschließlich verfügbar, wenn PHP als Apache-Modul (mod_php) betrieben wird. Bei Verwendung anderer SAPIs (z. B. FPM, CGI, CLI) ist die Funktion nicht definiert und deren Aufruf führt zu einem Fatal Error.
Sicherheitshinweis: Wenn der an apache_lookup_uri() übergebene URI aus Benutzereingaben stammt, muss er sorgfältig validiert und bereinigt werden, um Path-Traversal-Angriffe oder das unbeabsichtigte Auflösen sensibler interner Pfade zu verhindern.
Objekteigenschaften: Die genauen Eigenschaften des zurückgegebenen Objekts sind abhängig von der Apache-Version und können sich zwischen Versionen unterscheiden. Es sollte daher immer geprüft werden, ob eine Eigenschaft mit isset() existiert, bevor sie verwendet wird.