php und symbolische links

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von dbr, 04.10.2005.

  1. dbr

    dbr Thread Starter MacUser Mitglied

    Beiträge:
    45
    Zustimmungen:
    0
    MacUser seit:
    28.05.2005
    pro's gefragt: php und symbolische links

    habe ein ziemlich schwerwiegendes etwas ominöses problem:

    habe mehrere webprojekte die mit den selben php-scripts arbeiten, jedoch jeweils eine eigene datenbank verwenden.

    dazu habe ich mit ln -s symolische links erstellt die auf bestimmte verzeichnisse linken in denen die scripts zentral bereitstehen.

    das ganze sieht ca. so aus:
    /scriptdir/admin/
    /scriptdir/lib/
    /scriptdir/upload

    und für ein jeweiliges projekt folgende verzeichnisstruktur:
    /project/admin -> ../scriptdir/admin
    /project/lib -> ../scriptdir/lib
    /project/upload -> kein link!!

    das problem ist jetzt folgendes.. wenn ich im projektfolder /admin/ ein uploadscript (upload.php) ausführe.. und ich der move_uploaded_file funktion einen relativen pfad zum uploadverzeichnis angebe also "../upload/uploadedfile.ext"


    aus irgendeinem mir unersichtlichen grund führt diese angabe nicht zum /project/upload folder... sondern in den /scriptdir/upload folder... d.h. das script lässt sich vom symolischen link nicht "täuschen" und geht vom original aus (also der pfad unter dem das script tatsächlich lieggt (/scriptdir/admin/upload.php )

    hoffe ich konnte es einigermaßen verständlich formulieren.

    hat jemand eine idee wie man dieses problem lösen könnte... ?

    big thx in advance!

    Dbr
     
    Zuletzt bearbeitet: 04.10.2005
  2. catvarlog

    catvarlog MacUser Mitglied

    Beiträge:
    1.468
    Zustimmungen:
    1
    MacUser seit:
    30.01.2005
    ich vermute, dass der pfad des upload-dirs relativ zu deiner zentralen installation ermittelt wird. sprich: aus der sicht des skriptes wird der upload-pfad richtig ermittelt - was dir natürlich nicht weiterhilft. es scheint aber alles OK zu sein.

    du könntest den pfad zum "richtigen" upload "hart-verdrahten"... z.B.

    $folder = $clientBaseFolder."/upload/";

    echo $clientBaseFolder könnte z.B. sein:
    /var/www/kunde_1

    echo $folder wäre dann z.B.
    /var/www/kunde_1/upload/


    hoffe, das hilft weiter.
    gruss, cat.
     
  3. dms

    dms

    Oder Du baust Dir eine Funktion die den Pfad übersetzt. An den aktuellen Pfad kommst Du per $_SERVER["PATH_TRANSLATED"]. Dann brauchst Du eine Funktion die den relativen Pfad auf diesen Absoluten anwendet.

    Diese Funktion könntest Du vom jeweiligen Nutzer (falls es z.B. um virtual Hosting geht) verstecken indem Du sie in die Funktion move_uploaded_file einbindest.

    -originale move_uploaded_file-Funktion umbenennen: rename_function()
    -eigene Funktion move_uploaded_file erstellen, die die Pfadumwandlung enthält und die orignale move_uploaded_file-Funktion danach aufruft.

    Das ganze kannst Du in eine Datei schreiben die Du grundsätzlich in PHP einbindest (php.ini -> auto_prepend_file)

    Ist ein dreckiger Hack, aber sollte funktionieren. :)
     
    Zuletzt von einem Moderator bearbeitet: 13.10.2005
  4. catvarlog

    catvarlog MacUser Mitglied

    Beiträge:
    1.468
    Zustimmungen:
    1
    MacUser seit:
    30.01.2005
    "dreckiger hack" in kombination mit "file upload" erzeugt bei mir eine gänsehaut :)
     
  5. dms

    dms

    Nachts um 3 kommt man schon auf spannende Ideen. ;)
     
  6. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.066
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    Aus welchem Grund kein absoluter Pfad bei der Uploadfunktion?

    Oder sonst mit document root (gibt URL an, nicht Filesystem) ($_SERVER["DOCUMENT_ROOT"]/project/upload/)
     
  7. catvarlog

    catvarlog MacUser Mitglied

    Beiträge:
    1.468
    Zustimmungen:
    1
    MacUser seit:
    30.01.2005
    documentroot ist nicht immer gleich speicherort der projektdateien. das ist doch nur das wurzelverzeichnis des webservers.

    in dem fall wären alle projekte öffentlich zugänglich, das sie unterhalb des roots liegen.
     
    Zuletzt bearbeitet: 14.10.2005
  8. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.066
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    Es ist der upload-Ordner. Sehe kein Problem drin, das der per URL zugänglich ist. Wenn er's denn ist, sonst geht's nicht damit, ja.
     
  9. wegus

    wegus MacUser Mitglied

    Beiträge:
    14.712
    Zustimmungen:
    1.347
    MacUser seit:
    13.09.2004
    ich arbeite bei sowas mit virtuellen hosts in der httpd.conf und kann so per

    /path/to/somewhere/$_SERVER['HTTP_HOST']/...

    beliebig unterscheiden. Auf die Art betreibe ich bequem 5 Webserver auf einem PIII mit 500 MHz :)
     
  10. catvarlog

    catvarlog MacUser Mitglied

    Beiträge:
    1.468
    Zustimmungen:
    1
    MacUser seit:
    30.01.2005
    wenn es nur der ist, dann ist es ok. in deinem beispiel ist aber der upload-ordner unterhalb des projektes

    > $_SERVER["DOCUMENT_ROOT"]/ !! project !! /upload/

    du meintest bestimmt

    > $_SERVER["DOCUMENT_ROOT"]/upload/
     
Die Seite wird geladen...

Diese Seite empfehlen