Avatar billede Mik2000 Professor
26. februar 2011 - 01:48 Der er 11 kommentarer og
2 løsninger

Sikker mappe

Hej

Jeg har en mappe til pdf filer, som kun kan ligge i den offentlige mappe på en server

Så har jeg en administration hvor man logger ind, og hvor man kan ligge filer op, og se filer.

Hvordan beskytter man mappen (ligesom med HTTACESS fil (deny all), samtidige med at man med kode (PHP) stadig kan linke til filer i admin og vise/hente dem, samt ligge nye op?
Avatar billede jakobdo Ekspert
26. februar 2011 - 08:44 #1
PHP kan godt omgå htaccess.
Så hvis du beskytter mappen med htaccess, kan du stadig læse og skrive via php.
Avatar billede Slettet bruger
26. februar 2011 - 11:20 #2
Du laver en .htaccess med følgende indhold:

Order deny, allow
deny from all


Så laver du en php-fil der kan vise pdf-filerne. Den kunne hedde view-pdf.php og have følgende indhold (forenklet):

if ($_GET['view'] != "") {
    $pdf_file = $_GET['view'];
    if (file_exists($_SERVER["DOCUMENT_ROOT"]."/uploads/pdf/$pdf_file")) {
        header("Content-type:application/pdf");
        $pdf = file_get_contents($_SERVER["DOCUMENT_ROOT"]."/uploads/pdf/$pdf_file");
        echo $pdf;
    } else {
        echo "Fejl, dokumentet findes ikke!";
    }
} else {
    echo "Fejl, dokument ikke angivet";
}


Når du så skal linke til en pdf, bruger du følgende URL:
view-pdf.php?view=test.pdf
Avatar billede Mik2000 Professor
26. februar 2011 - 14:42 #3
Hej

Super - det virker - tak for det :)

Eneste lille ting, er at jeg har blandede filer - ved godt jeg fik skrevet pdf (fordi der mest er det).

Men der kan også være f.eks. jpg, png, gif, doc, docx, alle andre office dokumenter, osv.

De kan godt stå blandet på en liste.

Så hvad gør man så, for denne linje referere jo til hvad det er for en fil:
header("Content-type:application/pdf");

.... jeg har ingen steder i databasen der angiver om det er pdf, jpg eller andet.
Avatar billede Mik2000 Professor
26. februar 2011 - 15:28 #4
Hej

Fik det løst ved at lave en switch på extension og så sætte det derefter

Nu er der kun et problem tilbage jeg ikke kan finde ud af at løse

Såfremt en bruger ikke har et program der kan vise filen i browseren, eller såfremt de blot gerne vil højreklikke og gemme filen, så gemmes php filen

Jeg kan dog se at koden jeg har ikke står i filen, og jeg kan se at hvis man omdøber den til f.eks. .tif (såfremt den linkede til en tif fil), så virker filen uden problemer.

Så er der en måde hvorpå man kan sætte den til at skiftet .php ud med extension for den fil man henter, såfremt den hentes ned?
Avatar billede jakobdo Ekspert
26. februar 2011 - 17:02 #5
Det kan du styre med:

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>


Fundet på http://php.net/manual/en/function.header.php
Avatar billede Mik2000 Professor
27. februar 2011 - 00:52 #6
Hej

Så virker det - tak til jer begge.
Hvis I smider et svar, så er der point på vej :)
Avatar billede jakobdo Ekspert
27. februar 2011 - 09:05 #7
Svar
Avatar billede Slettet bruger
27. februar 2011 - 11:35 #8
Svar :)
Avatar billede Mik2000 Professor
27. februar 2011 - 15:59 #9
Tak for hjælpen :)
Avatar billede jakobdo Ekspert
27. februar 2011 - 16:02 #10
Takker for point.
Avatar billede Mik2000 Professor
11. juli 2011 - 11:19 #11
Hej

Et ekstra spørgsmål som jeg håber I kan hjælpe med. Har brugt samme metode til et lille billedalbum, men problemet er nu hvordan jeg får den til at vise billederne i stedet for at hente dem ned?

... sådan så jeg kan vises dem på siden, og man kan klikke på dem og få stor version mv.
Avatar billede jakobdo Ekspert
12. juli 2011 - 22:27 #12
Hvad tænker du ?
Der er vel ingen grund til at beskytte billederne, men vise dem alligevel?
Eller misforstår jeg?
Dog tror jeg du får bedre svar, hvis du opretter et nyt spørgsmål.
Avatar billede Mik2000 Professor
12. juli 2011 - 23:56 #13
Har oprettet et nyt også med point: http://www.eksperten.dk/spm/942849

Det er fordi jeg f.eks. har steder hvor der skal være et billedalbum man kan se efter man er logget ind, men man må ikke kunne gå direkte ind på f.eks. www.side.dk/billeder/billede.jpg og på den måde se det.

Så har brug for jeg med koden kan hente og vise billedet på en side (hvor man f.eks. er logget ind, men at man ikke kan se det på eksempelvis den direkte sti.
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