Start · Sprachen · PHP · Referenz · virtual

virtual

Funktion

Führt eine Apache-Unteranfrage (Sub-Request) für die angegebene Datei durch und gibt deren Ausgabe direkt aus.

Kategorie: misc

Signatur

virtual(string $filename): bool

Beschreibung

virtual() ist eine Apache-spezifische Funktion, die eine interne Apache-Unteranfrage für eine gegebene URI durchführt. Dies entspricht dem Apache-SSI-Befehl <!--#include virtual="..." -->. Die Funktion ermöglicht es, andere PHP-Skripte, CGI-Skripte oder statische Dateien serverseitig einzubinden, als ob der Browser diese direkt angefragt hätte.

Wichtig: virtual() ist ausschließlich verfügbar, wenn PHP als Apache-Modul (mod_php) betrieben wird. Bei anderen Serverkonfigurationen (z. B. PHP-FPM, FastCGI, CLI) steht die Funktion nicht zur Verfügung.

Im Gegensatz zu include oder require wird die angegebene Datei durch den Apache-Mechanismus verarbeitet – d. h. sie durchläuft den vollständigen Apache-Request-Zyklus inklusive aller konfigurierten Handler und Module. Dies macht virtual() nützlich, wenn z. B. eine Datei verarbeitet werden soll, die durch einen anderen Handler (z. B. Perl-CGI) bedient wird.

Da die Ausgabe der Unteranfrage direkt in den Ausgabepuffer geschrieben wird, sollte virtual() nur eingesetzt werden, wenn der Apache-Kontext zwingend erforderlich ist. Für reine PHP-Einbindungen sind include oder require performanter und portabler.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Der URI-Pfad der Datei oder des Skripts, das als Apache-Unteranfrage ausgeführt werden soll. Der Pfad muss relativ zum Dokumentenstamm (DocumentRoot) des Apache-Servers angegeben werden, z. B. /includes/header.php.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Unteranfrage erfolgreich durchgeführt wurde. Bei einem Fehler (z. B. Datei nicht gefunden oder keine Apache-Umgebung) wird false zurückgegeben.

Beispiele

Einbinden eines Apache-seitigen Header-Skripts

<?php
// Bindet /common/header.php über eine Apache-Unteranfrage ein
if (!virtual('/common/header.php')) {
    echo '<!-- Header konnte nicht geladen werden -->';
}

echo '<p>Hauptinhalt der Seite</p>';

virtual('/common/footer.php');
?>

Einbinden eines CGI-Skripts über virtual()

<?php
// Ein Perl-CGI-Skript wird durch Apache verarbeitet und ausgegeben
// Dies funktioniert nur, wenn der Apache-Handler für .cgi konfiguriert ist
virtual('/cgi-bin/stats.cgi');
?>

// Wichtig · Fallstricke

Plattformabhängigkeit: virtual() funktioniert ausschließlich im Apache-Modul-Modus (mod_php). Unter PHP-FPM, CLI oder anderen SAPIs ist die Funktion nicht verfügbar und wirft einen fatalen Fehler. Portabler Code sollte daher function_exists('virtual') prüfen, bevor die Funktion aufgerufen wird.

Sicherheit: Benutzereingaben dürfen niemals direkt als Argument an virtual() übergeben werden, da dies zu Path-Traversal-Angriffen führen kann (z. B. /../../etc/passwd). Der Pfad muss immer serverseitig validiert und auf erlaubte Werte beschränkt werden.

Veraltete Praxis: In modernen PHP-Anwendungen wird virtual() kaum noch verwendet. Für die Einbindung von PHP-Dateien sind include oder require vorzuziehen; für HTTP-Anfragen eignet sich cURL besser.