SERVER und Pfade
Wie finde und extrahiere ich den Pfad, den Ordnernamen oder den Dateinamen, oder die Dateiendung eines Scripts.
Superglobale Variable SERVER
$_SERVER[]
basename()
dirname()
Superglobals sind vordefinierte Variablen bzw. Arrays, die wie die Konstanten auch aus jeder Funktion heraus verfügbar sind. $_SERVER[] beinhaltet verschiedene assoziative Indizes, um einzelne Pfadbestandteile separat anzusprechen:
<?php
echo $_SERVER['SCRIPT_FILENAME'];
echo $_SERVER['DOCUMENT_ROOT'];
echo $_SERVER['PHP_SELF'];
echo $_SERVER['SCRIPT_NAME'];
echo basename(dirname($_SERVER['PHP_SELF']),'/'); // Parameter 2 ist der Backslash
echo basename($_SERVER['PHP_SELF'],'.php'); // Parameter 2 ist die Extension
?>
/home/bieferc/www/lehrling 'DOCUMENT_ROOT' ist der Root-Pfad des Servers.
/php/pfade.php 'PHP_SELF' ist der Pfad und Dateiname ab dem Server.
/php/pfade.php 'SCRIPT_NAME' ist der Pfad und Dateiname ab dem Server.
php ist der Ordnername
pfade ist der Dadeiname ohne Endung .php
Durch basename() konnte ich den Dateinamen heraus lesen, durch dirname() den Ordnernamen.
Beide Funktionen basename() und dirname() funktionieren nur mit dem vollständigen Pfad als Parameter!
Beide erlauben mittels eines zweiten Parameters (innerhalb der Klammer, nach einem Komma)
das Eliminieren der Endung; bei basename die Dateiendung, bei dirname den Slash.
Pfad Info Array
pathinfo()
Um die Dateiendung zu löschen, ohne dass ich sie kenne, bediene ich mich folgenden Codes:
$file = $_SERVER['PHP_SELF']; $info = pathinfo($file); $fkk = basename($file,'.'.$info['extension']); echo $fkk;
pathinfo() retourniert also ein assoziatives Array mit Pfadinfos.
$pfadarray = pathinfo('http//www.lehrling/biefer.com/php/pfade.php');
echo "dirname: ".$pfadarray['dirname'], "\n";
echo "basename: ".$pfadarray['basename'], "\n";
echo "extension: ".$pfadarray['extension'], "\n";
echo "filename: ".$pfadarray['filename'], "\n"; // seit PHP 5.2.0
basename: pfade.php
extension: php
filename: pfade
Ein weiterer Weg den Pfad zu eruieren sind die Magischen Konstanten wie __FILE__.
Relative Pfadangaben kanonisieren
realpath()
realpath() ersetzt die symbolischen oder relativen Pfadangaben wie . oder / oder ./ und ../
durch den absoluten Pfadnamen. Wenn der Funktion kein Pfad angegeben wird, dann gibt sie den aktuellen Pfad zurück,
bei einem falschen Pfad gibt sie FALSE zurück.
echo "1. ". realpath(''); // leer
echo "2. ". realpath('.'); // Punkt = aktueller Ordner
echo "3. ". realpath('./'); // Punkt Slash = auch aktueller Ordner
echo "4. ". realpath('/'); // Slash = Root (Wurzelverzeichnis)
echo "5. ". realpath('../'); // Punkt Punkt Slash = der Ordner über dem aktuellen Ordner
2. /home/bieferc/www/lehrling/php
3. /home/bieferc/www/lehrling/php
4. /
5. /home/bieferc/www/lehrling
Zur Erklärung von relativen bzw. absoluten Pfaden siehe im Teil HTML Links.
Pfad auseinander nehmen
parse_url()
parse_url() analysiert eine URL mit Query-String und allerlei für Sachen drin und zelregt sie in einen Array. Ich kann durch einen Parameter z.B. den Pfad als String ausgeben lassen.
$url = 'http://benutzername:passwort@hostname/www.lehrling.biefer.com/index.php?variable=wert#textanker'; print_r(parse_url($url)); echo parse_url($url, PHP_URL_PATH);
Array
(
[scheme] => http
[host] => hostname
[user] => benutzername
[pass] => passwort
[path] => /www.lehrling.biefer.com/index.php
[query] => variable=wert
[fragment] => textanker
)
/www.lehrling.biefer.com/index.phpPfad zusammenfügen
http_build_url()
http_build_url() fügt einen Array zu einer URL zusammen. Erledigt das Gegenteil von parse_url().