Avatar billede tude-marie Nybegynder
24. april 2004 - 22:03 Der er 10 kommentarer og
1 løsning

Hent fil fra htaccess beskyttet mappe

Jeg har en mappe på mit webhotel, der indeholder nogle følsomme filer. Derfor er selve mappen beskyttet af en .htaccess med Deny From All.

Jeg har et seperat session baseret login system, der står for al kundetrafik på siden. Mit problem er nu at når kunden skal kunne downloade de filer der berører ham er de jo dækket af .htaccess.

Finder der en måde at hente filen til et cache lager på serveren og hente derfra? Eller kan man kopiere filen med en timer på til en mappe f.eks. samme navn som session_id, så filen forsviner efter lad os sige 15 min?
Avatar billede Syska Mester
24. april 2004 - 22:26 #1
interessant spm, hvis det er ikke alt for store filer var der jo måske også mulighed for at smide den ned i en database....
Avatar billede sukos Juniormester
24. april 2004 - 22:29 #2
Læg filerne udenfor http.
Og brug en download.php til at læse filen så brugeren kan downloade den.
Vil jeg da mene! :O)
Avatar billede Syska Mester
24. april 2004 - 22:46 #3
hmm, hvordan ser den kode så ud?? altså vil der kommer et download popup vindue ting frem eller hvordan???
Kunne jo være rart for så kan man jo også beskytte sine ting mod leechers
Avatar billede sukos Juniormester
24. april 2004 - 23:17 #4
hmm, det havde jeg nu aldrig prøvet før, og efter lidt søgen her på exp, ( http://www.eksperten.dk/spm/353777 ) lader det til at dette virker. (IE og NS)

Først, en fil til at liste et dirs indhold af filer:

<?php
$sti = "D:/sites/"; // stien til dir som ligger udenfor http
$path = opendir($sti);
while (false !== ($files = readdir($path))) {
if(is_dir($sti . $files)) {
continue;
}
echo"<a href=\"forcedownload.php?fil=". $files ."\">". $files ."</a><br>\n";
}
closedir($path);

?>

Og forcedownload.php:

<?php
if(isset($_GET["fil"])){

// Her bør lige laves et tjek på at filen findes
// Men i dette eks. findes den! :O)

$path = "d:/sites/";
header("Content-Disposition: attachment; filename=". $_GET["fil"] ."");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($path.$_GET["fil"]));
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");

$fp = fopen($path.$_GET["fil"],"r");
print fread( $fp, filesize($path.$_GET["fil"]) );
fclose($fp);
exit();
}
?>
Avatar billede Syska Mester
24. april 2004 - 23:24 #5
Det er da nice, og så kan man jo også lige smide noget test ind hvor de kommer fra så folk ikke leecher hvis man har cool data til at ligge på ens side :-P
Avatar billede sukos Juniormester
24. april 2004 - 23:28 #6
jahh, du bruger jo sessions til at holde styr på kunder, så det vil vel klare det?

Og synes nu osse den er "ret sjov", er bare ikke helt hundred på at den er helt korrekt, men den virker da vist?

Så du får lige et svar! :O)
Avatar billede sukos Juniormester
24. april 2004 - 23:29 #7
Nå, så ik' lige at det ikke var tude-marie som kommenterede! :O)
Avatar billede tude-marie Nybegynder
25. april 2004 - 19:31 #8
Jeg er gået i gang med at lave en variation af det du skriver der, der bruger funktionen fpassthru der henter filen.

Men du skal da have tak for hjælpen ;)
Avatar billede tude-marie Nybegynder
25. april 2004 - 19:33 #9
Kan ikke acceptere dit svar? Bliver ved med bare at reloade siden...
Avatar billede sukos Juniormester
25. april 2004 - 20:59 #10
æhh, marker navnet, og klik på accepter. (hvis du synes!)

Hvorfor fpassthru?
Avatar billede tude-marie Nybegynder
26. april 2004 - 14:07 #11
Fordi jeg kan spare lidt kode, men har ikke haft tid til at smide det sammen, kan være det ikke er den optimale løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester