---
title: "Visa en bild mha header"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/146623-visa-en-bild-mha-header"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2006-05-09T09:42:30.000Z"
updated: "2006-05-16T11:03:49.000Z"
replies: 16
views: 628
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/146623-visa-en-bild-mha-header"
---

# Visa en bild mha header

## #1 — learn, 2006-05-09T09:42Z

Är detta en korrekt och fullständigt tillvägagångssätt att visa en bild mha ett php-script:

```
<img src="bild.php" />
```

```php
header('Content-Type: image/jpg');
header('Content-Disposition: attachment; filename="Bild"');
readfile('bilder/bild.jpg');
```

Det finns ju en hel uppsjö med varianter, vad rekommenderas att skriva i headern? 

Jag har upptäckt att bilden tar längre tid på sig att laddas än om jag bara skriver ut den på "vanligt sätt". Har det med cachen att göra kanske, lagras bilden i besökarens cache-minne med koden ovan?

Permalänk: https://www.webforum.nu/p/146623

## #2 — sl0k, 2006-05-09T10:37Z

ta bort raden med attachment så funkar det bättre sen ..

anledningen till att det tar längre tid är för att hela filen ska läsas genom php istället för att enbart länkas till..

Permalänk: https://www.webforum.nu/p/1812504

## #3 — learn, 2006-05-09T11:32Z

Ok, menar du hela raden 

```php
header('Content-Disposition: attachment; filename="Bild"');
```

? Isf så får ju inte bilden ngt namn ("spara som")...

Permalänk: https://www.webforum.nu/p/1812519

## #4 — sl0k, 2006-05-09T17:33Z

> **learn skrev:**
>
> Ok, menar du hela raden 
>
>
> ```php
> header('Content-Disposition: attachment; filename="Bild"');
> ```
>
> 
> ? Isf så får ju inte bilden ngt namn ("spara som")...

Ok näe du hade rätt, har själv aldrig använt attachment så tidigare .. använd koden så som du hade. Det funkar.

Permalänk: https://www.webforum.nu/p/1812625

## #5 — nitro2k01, 2006-05-09T17:58Z

> **learn skrev:**
>
> ```php
> header('Content-Type: image/jpg');
> header('Content-Disposition: attachment; filename="Bild"');
> readfile('bilder/bild.jpg');
> ```

Vad som ska skrivas i headern beror på vad du vill göra. Ska du lägga adressen till PHP-filen i en img-tagg så rekommenderar jag denna kod:

```php
<?PHP
header('Content-Type: image/jpeg');
header('Content-Disposition: inline; filename="bild0.jpg"');
header('Content-Length: ' . filesize('bilder/bild0.jpg'));
readfile('bilder/bild0.jpg');
?>
```

Huruvida man strikt måste skicka med Content-Length vet jag inte säkert, men det skadar itne iaf. I övrigt, några saker att tänka på:

- Content-Type för jpg-bilder är image/jpeg med e.
- I detta fall bör du använda Content-Disposition: Inline
- Se till att du inte råkar skicka med katalognamnet, utan bara själv fulnamnet i Content-Disposition. Content-Disposition: inline; filename="bilder/bild0.jpg" är alltså fel.
- Se till att du inte råkar få några extra tecken före eller efter \<?PHP resp. ?\>

Permalänk: https://www.webforum.nu/p/1812633

## #6 — learn, 2006-05-10T10:02Z

OK, tackar!

Anledningen till att jag vill visa bilden mha php-scriptet är för att dölja sökvägen till bilden. Men jag kanske inte behöver dölja den eftersom mappen "bilder" ligger utanför rooten...då kan ju utomstående besökare ändå inte söka upp bilden på egen hand... Eller? Har jag förstått det hela rätt?? Isf kan jag ju skriva:

```
<img src="../bilder/bild.jpg" />
```

Eller är detta en "säker" och pålitlig metod??

Permalänk: https://www.webforum.nu/p/1812813

## #7 — nitro2k01, 2006-05-10T10:10Z

Om bilderna ligger utanför roten, så går det inte att komma åt dem alls genom att bara skriva in en sökväg, (Varken i en img-tagg eller genom att skriva in adressen i adressfältet) utan du måste ta hjälp av t ex php. 
Vad vill du uppnå? Skydda din bilder från nedladdning? Skyda mot hetlänkning? I båda fallen kan .htaccess kanske vara till hjälp.

Permalänk: https://www.webforum.nu/p/1812817

## #8 — learn, 2006-05-10T10:12Z

Jag vill skydda bilderna från nedladdning. Hur använder jag .htaccess i detta fall? Tacksam för all hjälp jag kan få :)

Permalänk: https://www.webforum.nu/p/1812821

## #9 — sl0k, 2006-05-10T10:12Z

Nej det kommer inte att fungera av den anledningen som du själv sa.
**(/red angående ditt inlägg om du kunde använda \<img src="../bilder/bild.jpg" /\>)**

Jag antar att du kanske menade

```
<img src="bild.php?bild=../bilder/bild.jpg" />
```

Vilken antagligen kommer fungera om du läser in bildlänken från $\_GET\['bild'\].
Dock får du vara försiktig med det här och göra vissa säkerhetskontroller av bla mapp, filändelse m.m så att folk inte försöker komma åt vilka filer som helst i ditt system.

ett ex kunde vara att ha 

```php
<?php
$bild_mapp = "../bilder/";
$bild = basename($_GET['bild']);
if (is_readable($bild_mapp.$bild)) {
    $bildurl = $bild_mapp.$bild;
}
else {
    $bildurl = "default_error.jpg"; // sökväg till defaultbild
}
header('Content-Type: image/jpeg');
header('Content-Disposition: inline; filename="$bild"');
header('Content-Length: ' . filesize($bildurl));
readfile($bildurl);
?>
```

Och sen länka dina bilder till 

```
<img src="bild.php?bild=bild.jpg" />
```

/red typo

Permalänk: https://www.webforum.nu/p/1812822

## #10 — nitro2k01, 2006-05-10T10:16Z

> **learn skrev:**
>
> Jag vill skydda bilderna från nedladdning. Hur använder jag .htaccess i detta fall? Tacksam för all hjälp jag kan få :)

På vilket sätt ska det skydda mot att jag högerklickar och väljer spara bild?

Permalänk: https://www.webforum.nu/p/1812825

## #11 — learn, 2006-05-10T12:30Z

Jag menar att man inte skall kunna komma åt bilder på egen hand, tex genom att mata in dess adress i webbläsaren. Visar jag en bild så kan man naturligtvis spara ner bilden.

Permalänk: https://www.webforum.nu/p/1812856

## #12 — learn, 2006-05-15T07:56Z

bild.php:

```php
$bild_mapp = "../bilder/";
$bild = basename($_GET['bild']);
if (is_readable($bild_mapp.$bild)) {
    $bildurl = $bild_mapp.$bild;
}
else {
    $bildurl = "default_error.jpg"; // sökväg till defaultbild
}
header('Content-Type: image/jpeg');
header('Content-Disposition: inline; filename="$bild"');
header('Content-Length: ' . filesize($bildurl));
readfile($bildurl);
```

Funkar ju bra. Men hur säkert är det egentligen i enlighet med ovanstående kvalifikationer...?? Som jag ser är det ju bara för "boven" att själv inkluderar filen (<https://www.minsida.com/bild.php?bild=hej.jpg>) på sin egen sida... Kan jag förhindra detta på ngt sätt??   :q

Permalänk: https://www.webforum.nu/p/1817071

## #13 — learn, 2006-05-15T09:08Z

Att använda $\_SERVER\['HTTP_REFERER'\] för att kontrollera att bilden hämtas från min sajt är väl inte helt säkert? 

Kanske jag kan ancända mig av .htaccess-filen, men hur ska jag skriva min RewriteCond för detta?

Permalänk: https://www.webforum.nu/p/1817096

## #14 — learn, 2006-05-15T10:52Z

Om jag i min .htaccess skriver:
RewriteEngine on

```
RewriteCond HTTP_REFERER } !^$

RewriteCond HTTP_REFERER } !^http://minsida.com/.*$ [NC]

RewriteCond HTTP_REFERER } !^http://www.minsida.com/.*$ [NC]

RewriteRule ^(.*)$ [url]http://www.minsida.com/felsida[/url] [R]
```

Borde det räcka? Eller går det att ta sig förbi...?

Tack på förhand

Permalänk: https://www.webforum.nu/p/1817119

## #15 — sl0k, 2006-05-15T20:15Z

Du kan ju på sidan som du länkar till dina bilder slumpa fram en sträng.. som endast är giltig i ca 5min ..
O sen i bild.php testar så att korrekt sträng är angiven ..

Permalänk: https://www.webforum.nu/p/1817307

## #16 — learn, 2006-05-16T10:41Z

Okej, låter smart. Hur exakt då menar du, kan du visa med ett exempel? Tack

Permalänk: https://www.webforum.nu/p/1817447

## #17 — sl0k, 2006-05-16T11:03Z

Ett rätt simpelt ex är att dölja en timestamp i länken.. här kan du själv klura ut en algoritm för att gömma den väl men samtidigt enkelt kunna få tillbaka den. 

Här är ett ex där timestamp noteras hexadecimalt.

```php
// sidan där du skriver ut länkarna till bilderna 
$tiden = sprintf('%x', time());
echo "<img src=\"bild.php?bild=$din_bild_url&amp;t=$tiden\" />";
```

o sen i bild.php

```php
// test if valid t 
if (!isset($_GET['t'])) {
    $bildurl = $bild = "no_hotlink_allowed.jpg";
}
else {
    $t = $_GET['t'];
    $time_diff = time() - hexdec($t);
    if ($time_diff > 60*5) { // antal sekunder 60*5 = 5min
        $bildurl = $bild = "no_hotlink_allowed.jpg";
    }
    else {
        $bild_mapp = "../bilder/";
        $bild = basename($_GET['bild']);
        if (is_readable($bild_mapp.$bild)) {
            $bildurl = $bild_mapp.$bild;
        }
        else {
            $bildurl = "default_error.jpg"; // sökväg till defaultbild
        }
    }
}
header('Content-Type: image/jpeg');
header('Content-Disposition: inline; filename="$bild"');
header('Content-Length: ' . filesize($bildurl));
readfile($bildurl);
```

/red typos o mindre justeringar ...

Permalänk: https://www.webforum.nu/p/1817454

---

Tråden på webben: https://www.webforum.nu/amne/php/146623-visa-en-bild-mha-header
