Avatar billede supermichael Nybegynder
13. december 2005 - 04:05 Der er 5 kommentarer og
1 løsning

Hvordan beskytter jeg billeder med login i php?

Jeg vil gerne vide hvordan jeg beskytter billeder via php. Jeg ved hvordan man gør det i htacces men jeg vil gerne gøre det i php. (eller rettere, den jeg laver det for, vil) Jeg havde tænkt på at lægge det i en htaccess beskyttet mappe og så hente det via php's readfile() funktion, men den er ikke så god til billeder så vidt jeg ved..

Er der nogle der har forslag, så bliver jeg glad :)
Avatar billede ajenbo Nybegynder
13. december 2005 - 04:38 #1
Sørg for at du checker login i koden til billed henteren.
Here er hvad jeg bruger i header når jeg henter billeder fra "låste" mapper.

//sørger for at cache virker rigtig med filen.
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($dir.$file)).' GMT');

//sørger for at det bliver vist som billed.
if(ereg(".jpg",$file))
header("Content-Type: image/jpeg");
if(ereg(".png",$file))
header("Content-Type: image/png");
if(ereg(".gif",$file))
header("Content-Type: image/gif");

//sørger for at hvis brugeren vil gemme det bliver det gemt som billed.
header("Content-Disposition: attachment; filename=$file.jpg");

jeg vil tro du bare kan hente filen og så sende den til brugeren med en output buffer.

ob_start(); // start a new output buffer
file_get_contents($file);
$img = ob_get_contents();
ob_end_clean;
Avatar billede ajenbo Nybegynder
13. december 2005 - 04:41 #2
ups
header("Content-Disposition: attachment; filename=$file.jpg");
shoulde være
header("Content-Disposition: attachment; filename=$file");

og
file_get_contents($file);
skulde være
file_get_contents($dir.$file);

du skalder scripted med 2 parameter i din url

dir = den relative mappe til billedet i forhold til hvor scripted er.
file = navnet på billedet som du vil åbne.
Avatar billede jakobdo Ekspert
13. december 2005 - 07:47 #3
Du kan gøre det på denne måde:
Du ligger alle pics uden for web-roden! (så de ikke kan tilgåes direkte fra internettet af)
Så laver du en side som henter billedetrne, noget i stil med det som ajenbo kommer med.
Og husk så lige at lav et login tjek, evt:
if(!isset($_SESSION['loggedIn']) && empty($_SESSION['loggedIn']))
{
echo "Du er ikke logget ind";
exit();
}
og her kommer koden så som henter og viser billedet!
Avatar billede supermichael Nybegynder
14. december 2005 - 12:57 #4
Det skal lige siges at det ikke er billeder der skal downloades, men billeder der skal vises på en side fx. <img src="bla/bla.php" />

Jeg kan ikke få den der ob ting til at virke.. Headers virker fint skulle jeg mene. I vinduets tab (firefox) står der pic.ph (jpeg image) så jeg går ud fra at herders fungere fint. Der er bare intet billede at se. Siden er blank. Hvad gør jeg nu?
Avatar billede jakobdo Ekspert
14. december 2005 - 19:15 #5
Jeg har lige lavet noget som viser et billede via php, men det kan ikke vises direkte!
Ergo kan du smide noget login tjek på dette script:

<?php
//http://exp.dk/spm/671690

$dir = "ETMAPPESOMIKKEKANSESFRAWEBBEN";
$file = basename($_GET['file']);

//sørger for at cache virker rigtig med filen.
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($dir.$file)).' GMT');

$extension = end(explode(".",$file));
switch($extension)
{
    case "jpg":
    case "jpeg":
        header("Content-Type: image/jpeg");
        break;
    case "png":
        header("Content-Type: image/png");
        break;
    case "gif":
        header("Content-Type: image/gif");
        break;
    default:
        exit();
}

$fp = fopen($dir.$file, 'rb');

// send the right headers
header("Content-Length: " . filesize($dir.$file));

// dump the picture and stop the script
fpassthru($fp);
exit;

?>
Avatar billede ajenbo Nybegynder
15. december 2005 - 00:17 #6
istedet for
$extension = end(explode(".",$file));
switch($extension)
{
    case "jpg":
    case "jpeg":
        header("Content-Type: image/jpeg");
        break;
    case "png":
        header("Content-Type: image/png");
        break;
    case "gif":
        header("Content-Type: image/gif");
        break;
    default:
        exit();
}

så brug den her, den er mere sikker og nemme .

  header("Content-Type: ".mime_content_type($dir."/".$file));
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