Avatar billede avminarm Juniormester
01. april 2013 - 12:28 Der er 11 kommentarer og
1 løsning

beskytte mappe med billeder - men hent via php efter log in

Hej

Jeg har oprettet et webhotel hos gigahost.dk (mappen kan ikke placeres uden for www) og sidder og bakser med htaccess - jeg er total noob på dette område.
Jeg behersker PHP ngenlunde.

Jeg har 2 mapper som skal beskyttes.
Mapperne indeholder billeder fra overvågningskameraer.
Jeg skal kunne logge ind og hente indholdet af mapperne via PHP.
Jeg kan sagtens beskytte mapperne med en .htaccess der indeholder: Deny From All - men så kan jeg ikke komme til billederne via PHP? - include kan hente andre PHP-filer, men ikke billederne?

Jeg er kørt totalt fast. Nogen der kan hjælpe?

strukturen er således:
domæne.dk
domæne.dk/mappe1 -- skal beskyttes
domæne.dk/mappe2 -- skal beskyttes
Avatar billede moddi100 Seniormester
01. april 2013 - 14:12 #1
Som du selv nævner beskytter du de to mapper med en Deny From All. Filerne i mapperne kan så ikke længere tilgås via browseren men kun via php. F.eks. kan du bruge file_get_contents() eller readfile() til at hente filernes indhold hvad enten der er tale om et billede eller en regulær fil.

På dokumentationssiden for readfile() er der givet flere eksempler (se også kommentarerne) på hvordan du udskriver et billede til brugeren: http://php.net/manual/en/function.readfile.php

Princippet er blot at du har en php-fil som indlæser din beskyttede fils indhold og så udskriver det. I php-filen foretager du så dine adgangstjek inden indholdet udskrives/downloades.

Et billede i HTML kunne så komme til at se ud som følgende:
<img src="billede.php?file=banner.png" ... />


Blot husk at tjekke at det er et billede fra den beskyttede mappe og ikke en fil med passwords eller lign.
Avatar billede avminarm Juniormester
01. april 2013 - 17:12 #2
hej og tak for input.

Jeg er bare bange for at jeg løber tør for memory da der nogen gange skal vises 100+ billeder - jeg ville gerne vise dem "rå" - altså uden at beandle dem.
Jeg har tidl kørt billederne gennem en thumbnail script og her fremstod flere af filerne som "broken" pga memory limit.

Jeg har prøvet at opsætte htaccess så man skal logge ind - men jeg får bare "no input file specified"

kan der ikke være en anden vej?
Avatar billede moddi100 Seniormester
01. april 2013 - 20:08 #3
Der er alternativer, men jeg vil klart anbefale dig at bruge php-vejen.

Om der er tale om 1 eller 100 billeder burde ikke gøre nogen forskel i denne sammenhæng. Hvis der er tale om nogle store billeder kan der dog godt opstå problemer. Typisk vil det så være hvis du bruger en af funktionerne til at indlæse hele billedet på én gang.

Følgende utestede kode, burde løse problematikken:

// Test først om brugeren skal have adgang



$name = basename($_GET['file']);

// Vi antager at denne fil ligger i rodmappen
$dir1 = dirname(__FILE__) . '/mappe1/';
$dir2 = dirname(__FILE__) . '/mappe2/';

// Find den fulde filsti
if(is_file($dir1 . $name))
  $filename = $dir1 . $name;
else if(is_file($dir2 . $name))
  $filename = $dir2 . $name;
else
  die("Filen blev ikke fundet");

// Udskriv de nødvendige headers. Her skal tilføjes lidt alt efter
// hvilken filtype der er tale om.
header('Content-Type: image/png');

// Udskriv billedet bid for bid
$fp = fopen($filename, "r");
while (!feof($fp))
{
    echo fread($fp, 8192);
    flush(); // output

fclose($fp);

exit; // Vi ønsker ikke at fortsætte


Se bl.a. http://www.php.net/manual/en/function.header.php#86554

Når ovenstående så er sagt, hvad skrev du i din htaccess-fil og hvor fik du fejlen nævnt i #2?
Avatar billede avminarm Juniormester
01. april 2013 - 21:10 #4
ok prøver at rode lidt med det :-)
Billederne er ikke så store - jeg har læst mig frem til at readfile ikke belaster så hårdt.

Jeg skrev i htaccess

AuthUserFile home/www/domæne/test/.htpasswd
AuthGroupFile /dev/null
AuthName "Private Area"
AuthType Basic

require valid-user
Avatar billede olebole Juniormester
01. april 2013 - 22:16 #5
<ole>

"Jeg er bare bange for at jeg løber tør for memory da der nogen gange skal vises 100+ billeder - jeg ville gerne vise dem "rå" - altså uden at beandle dem.
Jeg har tidl kørt billederne gennem en thumbnail script og her fremstod flere af filerne som "broken" pga memory limit."


I så fald er det 'helt knald' at vise dem 'rå'. Du bør naturligvis lave thumbnails - og kan din server ikke det, er billedet næppe egnet til webteknologien. Så bør det formindskes, inden det lægges op

/mvh
</bole>
Avatar billede avminarm Juniormester
01. april 2013 - 22:31 #6
Hej Ole

Ja det kan være det er løsningen(anden server), men det er et overvågningskamera der lægger billederne op, så hvis det skal være thumbs skal det være noget der laves efterfølgende = samme problem med memory.

Nu er billederne faktisk ikke Store i sig selv 20-30 kb (lige pt) og så burde det kunne lade sig gøre. Prøver med readfile løsningen og ser.

Ville virkelig bare gerne lave noget simpelt og brugbart. Pt er det til eget brug.
Avatar billede olebole Juniormester
01. april 2013 - 22:47 #7
Du må have lavet en eller flere fejl, for biileder på 20-30KB giver ingen problemer.
Avatar billede scootergrisen Nybegynder
02. april 2013 - 05:44 #8
Avatar billede moddi100 Seniormester
02. april 2013 - 19:50 #9
Som olebole lyder thumbnails som en god ide. Du opretter og gemmer så bare en thumbnail første gang et billede skal vises.

Med hensyn til din .htaccess-fil, som jo så ikke ender med at være løsningen, skal du anvende den absolutte/fulde filsti. Dvs at filstien skal starte med /home/ og ikke home/.

AuthUserFile /home/www/domæne/test/.htpasswd
AuthGroupFile /dev/null
AuthName "Private Area"
AuthType Basic

require valid-user


For at finde den fulde sti til den aktuelle mappe, kan du lave et script med koden:
<?php die(dirname(__FILE__)); ?>


Men som sagt bør du kigge videre på readfile metoden
Avatar billede avminarm Juniormester
02. april 2013 - 22:49 #10
Hej alle

Jeg har fået en acceptabel løsning via readfile og htaccess så det er bare super :-)

Smider i nogen svar. Tak for hjælpen.
Avatar billede olebole Juniormester
02. april 2013 - 23:12 #11
Ellers tak, jeg samler ikke point, men de andre gør  =)
Avatar billede moddi100 Seniormester
03. april 2013 - 19:36 #12
Godt at høre, at det lykkedes :)
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
Kurser inden for grundlæggende programmering

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