BloodySword: Bilder außerhalb von HTDOCS ablegen und per fpassthrough per PHP

Beitrag lesen

Hallo allerseits.

Ich habe folgende Idee:

Ich habe ein sehr großes Bilderarchiv, welches im Moment noch in HTDOCS liegt. Wenn ein
User also nicht in meinem Communitysystem registriert ist, den Pfad aber kennt, kann er jedes Bild problemlos im Browser einsehen. Dem möchte ich ein Riegel vorschieben.

Eine Lösung habe ich mir bereits überlegt, weiß aber nicht ob sich das so einfach bewerkstelligen lässt:

Ich lege die Bilder in einem Ordner außerhalb von HTDOCS ab und greife mit PHP darauf zu, sobald ein Bild geladen werden muss und gebe das Bild per fpassthru() aus.

Zurzeit sieht es so aus, klappt wunderbar:

  // Session starten  
  session_start();  
  
  include ("includes/sqlconnect.php"); //Mit Datenbank verbinden. Wird in $db geschrieben  
  include ("includes/checkuser.php"); //Prüfen ob die Session noch gültig ist  
  
  
   /*-------------------------------------------*\  
  |      Bild anhand ID ausgeben, Miniscript     |  
  \*-------------------------------------------*/  
  
  if (isset($_GET['user_pic']) || isset($_GET['user_thumb']) || isset($_GET['pic_big'])  
   || isset($_GET['pic_small']) || isset($_GET['pic_thumb']) || isset($_GET['pic_mt'])) {  
    $db->close(); unset($db); //Wir brauchen hier keine Datenbank ^^  
  
    $galery_base="../../userdata/gallery/";  
  	if(isset($_GET['pic_big']))  
      $filename="{$galery_base}{$_GET['pic_big']}b.jpg";  
    elseif (isset($_GET['pic_small']))  
      $filename="{$galery_base}{$_GET['pic_small']}s.jpg";  
    elseif (isset($_GET['pic_thumb']))  
      $filename="{$galery_base}{$_GET['pic_thumb']}t.jpg";  
    elseif (isset($_GET['pic_mt']))  
      $filename="{$galery_base}{$_GET['pic_mt']}mt.jpg";  
    elseif (isset($_GET['user_pic']))  
      $filename="{$galery_base}user{$_GET['user_pic']}.jpg";  
    elseif (isset($_GET['user_thumb']))  
      $filename="{$galery_base}user{$_GET['user_thumb']}th.jpg";  
  
    $img_base="images/gallery/";  
    if(file_exists($filename)===false) {  
      if(isset($_GET['user_pic']))  
        $filename="{$img_base}noprofilepic.png";  
      elseif (isset($_GET['user_thumb']))  
        $filename="{$img_base}noprofilepic96.png";  
      elseif (isset($_GET['pic_big']) || isset($_GET['pic_small']) ||  
              isset($_GET['pic_thumb']) || isset($_GET['pic_mt']))  
        $filename="{$img_base}nopic.png";  
    }  
  
    $currdate=date("r");  
    $fildate=date("r",filemtime($filename));  
  
    $imginf=getimagesize($filename);  
    $fimg=fopen($filename, "rb");  
    if ($imginf && $fimg) {  
      header("Date: {$currdate}");  
      header("Last-Modified: {$fildate}");  
      header("Content-Type: {$imginf['mime']}");  
      header("Cache-Control: public");  
      fpassthru($fimg); fclose($fimg); exit;  
    } else {  
      echo "Error opening picture!"; exit;  
    }  
  }  
  
//(... weiterer Code der gesamten Galerie ...)

Nun möchte ich den Ordner "userdata" außerhalb von HTDOCS verschieben.
Ist das ohne Weiteres möglich? Was muss ich einstellen, damit PHP auf diese
Dateien zugreifen kann?

Zurzeit läuft das Projekt noch lokal auf meinem Laptop in XAMPPLITE.

Vielen Dank im Voraus! :)