PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: relative in absolute Pfadangaben


dav133
2007-08-09, 18:05:44
Hallo,

Es geht um ein Backup-Script, welches Zip-Dateien von Ordnern auf dem Server erstellt.

ich habe im Ordner http://www.domain.de/backup/ die datei "backup.php", in der mit einer absoluten Pfadangabe ein Ordner angegeben wird, der gebackupped werden soll, also bspw. $foldertobackup = "http://www.domain.de/wichtige_Daten/". Nur brauche ich die Pfadangabe realativ, also wie komme ich von "http://www.domain.de/wichtige_Daten/" auf "../wichtige_Daten/"? Das Script soll auf weiteren Servern zum Einsatz kommen, deshalb kann ich nie mit Gewissheit sagen, wo sich das Script befindet und müsste die absolute in eine relative Pfadangabe umwandeln.

Geht das?
lg



/edit:

Nochmal zum bessern Verständnis:

um von http://www.domain.de/backup/test/123/ zu http://www.domain.de/backup/das/ist/ein/test/ zu kommen, lautet die relative Angabe "../../das/ist/ein/test/".

um von http://www.domain.de/backup/test/123/ zu http://www.domain.de/backup/test/123/456/789/ zu kommen, lautet die relative Angabe "456/789/".

Da muss es doch irgendwas geben, was eine absolute Pfadangabe in eine relative zur aktuellen Datei umwandelt.

JTHawK
2007-08-09, 19:41:44
<?php echo $_SERVER['DOCUMENT_ROOT']; ?>

und schonmal nach http://www.php.net/realpath geschaut?

dav133
2007-08-09, 21:11:22
<?php echo $_SERVER['DOCUMENT_ROOT']; ?>

und schonmal nach http://www.php.net/realpath geschaut?

hm, ich bräuchte die umkehrfunktion von realpath, also relativ in absolut. Und der document-root hilft mir auch nicht wirklich weiter, würde halt gerne wissen, obs sowas schon gibt, bevor ich da mit extrem komplizierten slash-zähl funktionen rangeh -.-

JTHawK
2007-08-10, 12:31:55
weil ich so lieb bin


FUNCTION get_relative_path($adresse) {
$http_domain = sprintf('http%s://%s',(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == TRUE ? 's': ''),$_SERVER['HTTP_HOST']);
$http_domain_subfolder = $http_domain.dirname($_SERVER['PHP_SELF']);
IF (substr($adresse, -1) == '/') {
$adresse = substr($adresse, 0, -1);
}
IF (strpos($adresse, $http_domain_subfolder) === false) { //wenn adresse kein unterordner vom scriptordner ist
$adresse_subdir = str_replace($http_domain,'',$adresse); //domain entfernen
IF (substr($adresse_subdir, 0, 1) == '/') {
$adresse_subdir = substr($adresse_subdir, 1);
}
RETURN preg_replace('/\\/([a-z0-9_]+)/', '../', dirname($_SERVER['PHP_SELF'])).$adresse_subdir; //wenn kein unterordner
} ELSEIF ($adresse == $http_domain_subfolder) { //wenn scriptordner und angegebene adresse identisch sind
RETURN $adresse;
} ELSE { //wenn adresse unterordner vom scriptordner ist
$adresse_subdir = str_replace($http_domain_subfolder,'',$adresse);
IF (substr($adresse_subdir, 0, 1) == '/') {
$adresse_subdir = substr($adresse_subdir, 1);
}
RETURN $adresse_subdir;
}
}


kann man eventuell noch optimieren

bei fragen .. fragen :D