Start · Sprachen · PHP · Referenz · apache_lookup_uri

apache_lookup_uri

Funktion

Führt eine interne Apache-Teilanfrage (Sub-Request) für einen URI durch und gibt ein Objekt mit allen verfügbaren Informationen über diesen URI zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

apache_lookup_uri(string $filename): object|false

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

Typ
object|false
Beschreibung
Gibt bei Erfolg ein Objekt zurück, das diverse Eigenschaften des angegebenen URI enthält. Mögliche Eigenschaften sind u. a. 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.';
}
Status: 200 Dateiname: /var/www/html/index.php Content-Type: text/html URI: /index.php

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.";
}
Der URI '/bilder/logo.png' wurde vom Apache erfolgreich aufgelöst.

// 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.