Bestimmen der includierten Datei anhand von $_SERVER

$_SERVER ist eine so genannte Superglobal und enthält Informationen, wie die Sprache des Users und Daten zu der aufgerufenen Datei.

Mit folgendem Code kann man sich den gesamten Inhalt samt Keys auflisten lassen:

<?php
foreach ($_SERVER as $key => $info) {
	echo $key.': '.$info.'<br />';
}
?>

Die Ausgabe kann dann wie folgt aussehen:

TMPDIR: /var/www/html/project.tld/temp/
PATH: /usr/local/bin:/usr/bin:/bin
PHPRC: /var/www/html/project.tld/conf/
PWD: /var/www/html/project.tld/php-fcgi
FCGIROLE: RESPONDER
UNIQUE
ID: Twgt2T5asdUAAHbGuiIAAACS
HTTPHOST: project.tld
HTTP
USERAGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
HTTP
ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTPACCEPTLANGUAGE: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
HTTPACCEPTENCODING: gzip, deflate
HTTPACCEPTCHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7
HTTPCOOKIE: PHPSESSID=2a03a4eec3as2b9a4afd692474c64c1e
HTTP
DNT: 1
HTTPCONNECTION: close
SERVER
SIGNATURE:
SERVERSOFTWARE: Apache/2.2.17
SERVER
NAME: project.tld
SERVERADDR: 1.1.1.1
SERVER
PORT: 80
REMOTEADDR: 2.2.2.2
DOCUMENT
ROOT: /var/www/html/project.tld/httpd
SERVERADMIN: [email protected]
SCRIPT
FILENAME: /var/www/html/project.tld/httpd/test.php
REMOTEPORT: 50156
GATEWAY
INTERFACE: CGI/1.1
SERVERPROTOCOL: HTTP/1.1
REQUEST
METHOD: GET
QUERYSTRING: test=test
REQUEST
URI: /test.php?test=test
SCRIPTNAME: /test.php
PHP
SELF: /test.php
REQUEST_TIME: 1325936089

$SERVER enthält keinen Key für den Namen der aufgerufenen Datei selber. Wenn man darauf reagieren möchte, welche Datei einen bestimmten Code includiert hat, wird man mit dem Aufruf eines Keys von $SERVER alleine erfolglos sein. Man kann die notwendige Information aber aus dem Key ‚SCRIPT_NAME‘ gewinnen:

<?php
// den Key 'SCRIPT_NAME' an den "/" trennen.
$split=preg_split("/\//",$_SERVER['SCRIPT_NAME'],-1,PREG_SPLIT_NO_EMPTY);
// Die Einträge des Arrays bestimmen und 1 abziehen, da bei den Array Keys bei 0 zu zählen begonnen wird
$count=count($split)-1;
// Der Letzte Eintrag ist unsere Datei
$file=$split[$count];
// Wenn es die Datei x ist, 'Hello World' ausgeben, ansonsten den Dateinamen
if ($file=='x.php') {
	echo 'Hello World';
} else {
	echo $file;
}
?>

Ohne Kommentare und zusammengefasst sieht der Code dann so aus:

<?php
$split=preg_split("/\//",$_SERVER['SCRIPT_NAME'],-1,PREG_SPLIT_NO_EMPTY);
$file=$split[count($split)-1];
if ($file=='x.php') {
	echo 'Hello World';
} else {
	echo $file;
}
?>

Tech Topic(s) des Artikels