# auch ein .htaccess Problem



## Momo95 (4. Juli 2011)

Hallo,

ich habe mit deny from all meine Datein geschützt.
Ich möchte aber gerne die dateien auf einer seite anzeigen (anzeigen.php). Am liebsten würde ich diese mit einem Frame anzeigen.
Kann ich also irgendwie eine ausnahme für diese funktion erstellen?

Vielen Dank


----------



## ComFreek (4. Juli 2011)

Du könntest es mal mit folgendem probieren:

```
<Files *>
order allow,deny
deny from all
</Files>
<Files anzeigen.php>
order allow,deny
allow from all
</Files>
```


----------



## Momo95 (4. Juli 2011)

danke, aber so meinte ich die ausnahme nicht.

Es sollen alle dateien "gesperrt" sein. Nur auf der seite "anzeigen.php" möchte ich sie anzeigen. Diese liegt auch in einem anderen ordner.


----------



## franz007 (4. Juli 2011)

Du solltest doch per php darauf zugreifen können zb mit 

```
echo file_get_contents("geschueteztesVerzeichnis/dateiX.txt");
```

Gruß


----------



## Momo95 (4. Juli 2011)

geht das auch mit bildern?


----------



## ComFreek (4. Juli 2011)

Das geht mit allen Dateien!


----------



## Momo95 (4. Juli 2011)

Ich würde es aber trotsdem lieber mit frame machen, da ich auch PDFs und Videos habe, die dann richtig angezeigt werden. (adobe und quicktime application) 

Gibt es da irgendeine möglichkeit?


----------



## ComFreek (4. Juli 2011)

Wieso gibst du nicht einfach Link, der einen neuen Tab öffnet, aus?

Aber wenn du willst, kannst du auch ein Frame mit dem Inhalt deines PHP-Skriptes (also eigtl. die Datei) ausgeben.


----------



## Momo95 (4. Juli 2011)

Weil ich nicht möchte, dass man die datei über die URL öffnen kann


----------



## ComFreek (4. Juli 2011)

Das kannst du beim Frame genauso.

Ich würde eben das PHP-Skript auch noch mit einem Login versehen.
Aber dennoch kann jemand, der auf die Datei Zugriff hat, sie runterladen und woanders anbieten.

Also 100% Sicherheit, dass die Datei weitergegeben wird, hast du nie!


----------



## Momo95 (4. Juli 2011)

Also zu meinem Projekt:

Es geht darum, dass User Dateien hochladen können und andere diese anschauen und herunterladen können. Dies geht alles mit einem Login. 

Jetzt möchte ich aber, dass man die Dateien nur ansehen kann, wenn man auch eingeloggt ist.  

Auf meiner Seite sind bis jetzt nur absolute verlinkungen. Wenn man möchte, kann man die URL kopieren und nach dem Logout in die Adresszeile eingeben und man hat die Datei. Genau das möchte ich nicht!


----------



## ComFreek (4. Juli 2011)

Sowas ähnliches habe ich auch mal realisiert.

Ich habe einfach eine .htaccess in den Upload-Ordner gepackt, die alle Dateien sperrt.
Außerhalb diesen Ordners habe ich ein PHP-Skript gehabt, welches zuerst überprüft, ob der User die Erlaubnis hat zuzugreifen und danach die Datei ausgibt.

Also bei dir fehlt nur die Login-Überprüfung.


----------



## Momo95 (4. Juli 2011)

Bei mir sind jetzt auch alle dateien gesperrt. Und zwar für alles und jeden. Im moment sogar auch für meine eigen domain. Ich möchte aber die ausnahme erzeugen, dass alle dateien für die seite "ausnahme.php" nicht gesperrt sind. Ist das mit .htaccess irgendwie möglich?


----------



## ComFreek (4. Juli 2011)

Wenn du mit PHP intern zugreifst, kannst du die .htaccess ignorieren.

Nur die Datei ausnahme.php darf von außen aufgerufen werden.


----------



## Momo95 (4. Juli 2011)

Hast du vielleicht ein beispiel, wie ich die .htaccess ignoriere?


----------



## ComFreek (4. Juli 2011)

Du hast z.B. folgende Ordnerstruktur:

```
|
--*download.php*
--....
--*downloads*
  |
  --*.htaccess*
  --document.doc
  --internet
  |
  --site.html
```

Pseudo-Code für die download.php:

```
<?php

if (logged_in() == false)
{
  die ('Access denied!');
}

$filename = dirname(__FILE__).DIRECTORY_SEPARATOR.$_GET['filename'];

if ( file_exists($filename) )
{
  header("Content-type: application/octet-stream");
  header("Content-Length: ".filesize($fileTname));
  header("Content-Disposition: attachment; filename=\"".basename($filename). "\"");
  echo file_get_contents($filename);
}
else
{
  die ('File doesn\'t exist!');
}
?>
```
Und die .htaccess beinhaltet:

```
<Files *>
order allow,deny
deny from all
</Files>
```

Somit werden alle Dateien von einem externen Zugriff geschützt, allerdings nicht vor einem internen Zugriff durch unser PHP-Skript!
Deshalb können wir die Datei einfach so downloaden.


----------



## Momo95 (4. Juli 2011)

Vielen Dank erstmal. 
Aber ein download-script habe ich schon. ich möchte, dass die datei angezeigt wird. Und wenn es eine pdf ist, auch in der adobe/pdf aplication.


----------



## ComFreek (4. Juli 2011)

Ja, es passt doch so. Probier's doch erstmal aus.

Wenn du willst, kannst du auch noch den genauen Content-Type mitschicken.
Dann definierst du einfach ein Array und überprüfst die Dateiendung.

```
$contentTypes = array(".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
$fileEnding = substr($filename, strrpos($filename, "."));
```


----------

