Pfade und URLs und Aliasverzeichnisse ineinander überführen
Tom
- php
Hello,
ich benötige mal etwas Denkhilfe:
Ein Script erzeugt auf dem Server aus Bildern Thumbs und legt diese in einem für den PHP-Prozess zugänglichen Verzeichnis ab.
Nun soll die vollständige URL zu den Thumbs ermittelt werden, wenn das Zielverzsichnis innerhalb der DocRoot liegt. Anderenfalls soll eben nur false zurückgegeben werden.
Bisher bin ich hier angekommen:
function get_url($path,$protocol='http://')
{
$url = false;
## Dokument Root richtig stellen
$doc_root = $_SERVER['DOCUMENT_ROOT'];
if (substr($doc_root,-1) != "/")
{
$doc_root .= '/';
}
## liegt der Phad innerhalb der Document-Root?
$realpath = realpath($path);
if (strpos($realpath,$doc_root)===0)
{
$ressource = substr($realpath,strlen($doc_root));
$url = $protocol.$_SERVER['HTTP_HOST'].'/'.$ressource;
}
return $url;
}
Leider funktioniert das so nicht, wenn es sich z.B. un ein UserDir handelt. Wenn also z.B.
http://www.bitworks.de/~tschmieder/bilder/min_abf1233d.jpg
die vollständige URL zum Ergebnis wäre, bekomme ich das nicht aufgelöst und es fällt mir auch absolut nicht ein, wie ich das machen könnte.
Das Script würde dann z.B. in
/home/tschmieder/public_html/test/bildgalerie/
entsprechend:
http://www.bitworks.de/~tschmieder/test/bildgalerie/
liegen.
Das Problem dabei ist, dass der absolute Pfad hier nicht innerhalb der Dokument-Root für den VirtHost liegt.
Ob die resultierende URL schlussendlich wirklich HTTP-accessible ist, soll hier vorerst nicht geprüft werden. Das kommt dann später ;-))
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
echo $begrüßung;
Ein Script erzeugt auf dem Server aus Bildern Thumbs und legt diese in einem für den PHP-Prozess zugänglichen Verzeichnis ab.
Nun soll die vollständige URL zu den Thumbs ermittelt werden, wenn das Zielverzsichnis innerhalb der DocRoot liegt.
Leider funktioniert das so nicht, wenn es sich z.B. un ein UserDir handelt.
Und, es gibt außer den UserDir auch SymLinks und Aliases, mit denen man Dateien/Ressourcen außerhalb des DocRoots ansprechen kann...
Um von einem Dateinamen auf eine gültige URL zu kommen braucht man Kenntnisse der Apache-Konfiguration[*]. Ich kann mir nur vorstellen, durch Ausprobieren aller _möglichen_ URLs die/eine passende zu finden (apache_lookup_uri() ?), was nicht unbedingt eine sehr elegante Lösung ist.
Unter Beschränkung auf unver(sym)linkte DocRoot- und Userdir-Dateien könnte ich mir für das UserDir-Problem die Ermittlung einer _möglichen_ URL so vorstellen: Mittels einer RegExp-Operation wird aus HOME/$user/PUBDIR/$path_and_file den User ($user) und Rest des Dateinamens ($path_and_file) extrahiert und dann geschaut, ob mit apache_lookup_uri() "/~$user/$path_and_file" wieder der gleiche reale ...->filename ermittelt werden kann.
Hierzu müssen aber die Bestandteile HOME und PUBDIR bekannt sein, und die lassen sich nicht so ohne weiteres mit PHP-Mitteln herausfinden, zumal ja auch noch HOME für jeden User anders sein kann. (also konfigurierbare Konstanten ?)
echo "$verabschiedung $name";
[*] oder eine Sicherheitslücke :-)
Hello,
Und, es gibt außer den UserDir auch SymLinks und Aliases, mit denen man Dateien/Ressourcen außerhalb des DocRoots ansprechen kann...
[...]
scheint ein wirklich nicht einfach lösbares Problem zu sein, da es für die meisten vorhandenen Transformationen keine (für PHP zugängliche) Umkehrung gibt oder es sowieso keine gibt ...
Hinzu kommt dann ggf. auch noch der mod_rewrite, wenn er denn benutzt wird.
Kann man denn eigentlich bei der VirtHost-Definition Systemvariablen definieren, die dann von PHP ermittelbar sind?
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
echo $begrüßung;
Kann man denn eigentlich bei der VirtHost-Definition Systemvariablen definieren, die dann von PHP ermittelbar sind?
Das habe ich nie probiert/gebraucht, könnte mir aber mod_env als hilfreich vorstellen.
echo "$verabschiedung $name";