Avatar billede Mik2000 Professor
12. juli 2011 - 12:01 Der er 24 kommentarer og
1 løsning

Sikker mappe

Har brugt metoden fra dette spørgsmål: http://www.eksperten.dk/spm/932632

... 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. fremfor den forsøger at download.

Se dette spørgsmål: http://www.eksperten.dk/spm/932632
Avatar billede SuzmA Nybegynder
12. juli 2011 - 12:50 #1
Avatar billede Mik2000 Professor
12. juli 2011 - 13:01 #2
Det er ikke et billedgalleri jeg skal bruge.....

Skal vide hvordan jeg viser billeder, når der ligger en httaccess fil med følgende indhold:
Order deny, allow
deny from all
i samme mappe som billederne
Avatar billede mjense173 Nybegynder
12. juli 2011 - 14:22 #3
Prøv at give os den kode du bruger, som ikke virker nu.
Avatar billede infect3d Nybegynder
12. juli 2011 - 14:39 #4
Jeg ville trække billederen via en php fil f.eks. showpic.php som står for tjek af der er en login session eller lign til stede (for at sikre du må se billederne, der er jo nok en grund til du vil vise dem trods de ligger i en folder med deny,allow?). Denne "showpic.php" fil skal så ligge i en folder et niveau over, eller andetsteds.
Avatar billede Mik2000 Professor
12. juli 2011 - 16:38 #5
Koden er her:
http://www.eksperten.dk/spm/932632


Men kort trukket ud:
HTTACCESS:
Order deny, allow
deny from all

PHP
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";
}
Avatar billede Mik2000 Professor
12. juli 2011 - 16:40 #6
Kort fortalt er det for:
At man kan vise det på f.eks. administration eller lign., men således at alle ikke kan skrive adressen i søgefeltet og søgecomputere ikke kan finde adressen til billederne
Avatar billede jakobdo Ekspert
13. juli 2011 - 10:06 #7
Se her:
http://codebreaker.dk/exp/942849.php

Billedet hentes herfra:
http://codebreaker.dk/exp/942849/exp.gif
og mappen 942849 er beskyttet af:
Order deny,allow
Deny from all

Og koden som levere billedet er et mix af diverse koder fundet på php.net.

<?php
$dir = '942849/';
$file = 'exp.gif';
$file_full = $dir . $file;
$ext = strtolower(pathinfo($file,PATHINFO_EXTENSION));

error_reporting(E_ALL);
ini_set('display_errors','On');

switch ($ext) {
  case "gif": $ctype="image/gif"; break;
  case "png": $ctype="image/png"; break;
  case "jpeg":
  case "jpg": $ctype="image/jpg"; break;
  default: $ctype="application/force-download";
}

if(!$fp=@fopen($file_full,'r')){
  die("Unable to open file");
} else {
  header("Content-Type: $ctype");
  while(!feof($fp)) {
    $buf = fread($fp, 4096);
    echo $buf;
  }
}
?>
Avatar billede jakobdo Ekspert
13. juli 2011 - 10:07 #8
Og du får et svar.
Avatar billede Mik2000 Professor
13. juli 2011 - 22:02 #9
Hej

Denne linje:
header("Content-Type: $ctype");

Får den til blot at vise en blank side - ingen fejl eller noget andet :(

Fjerner jeg den så viser den en masse tegn (med andre ord læser den tilsyneladende filen)
Avatar billede jakobdo Ekspert
13. juli 2011 - 22:06 #10
Hvad filtype tester du med?
Avatar billede Mik2000 Professor
13. juli 2011 - 22:07 #11
Kan lige tilføje:
Det er en jpg fil jeg prøver med
Jeg har prøvet manuelt at sætte image/jpeg og image/jpg ind i stedet for $ctype men det er det samme
Jeg prøver fra en lokal server (Wamp)
Avatar billede Mik2000 Professor
13. juli 2011 - 22:13 #12
Prøvede lige med gif - same problem
Det gælder også på server (PHP 5.3.2)
Avatar billede jakobdo Ekspert
13. juli 2011 - 22:13 #13
Hvad hvis du tester en kort kode ala:

<?php

// open the file in a binary mode
$name = './img/ok.png';
$fp = fopen($name, 'rb');

// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

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

?>
Avatar billede jakobdo Ekspert
13. juli 2011 - 22:14 #14
Og det var så lige et png eksempel fra php.net.
Husk at ret til jpeg.
header('Content-Type: image/jpeg');
Avatar billede Mik2000 Professor
13. juli 2011 - 22:18 #15
Det giver mig også blot en blank side :(
Avatar billede jakobdo Ekspert
13. juli 2011 - 22:18 #16
Prøv lige at vis den fulde kode du tester med?
Avatar billede Mik2000 Professor
13. juli 2011 - 22:18 #17
Prøvede med et png også - samme resultat :(:(:(
Avatar billede Mik2000 Professor
13. juli 2011 - 22:21 #18
slet3.php indeholder følgende:
<?php

// open the file in a binary mode
$name = './942849/abc.png';
$fp = fopen($name, 'rb');

// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

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

?>
Har både prøvet ovenstående i en fil uden andet kode, og med normale HTML tags (html, body osv)

Har lavet en mappe der hedder:
942849
I mappen ligger en fil der hedder: abc.png
I mappen ligger der også en .htaccess fil med indholdet:
Order deny,allow
Deny from all
Avatar billede Mik2000 Professor
13. juli 2011 - 22:24 #19
Slettede lige browser cache og nu virker det lille eksempel tilsyneladende.....
<?php

// open the file in a binary mode
$name = './942849/abc.png';
$fp = fopen($name, 'rb');

// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

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

?>

men det andet virker ikke
<?php
$dir = '942849/';
$file = 'exp.gif';
$file_full = $dir . $file;
$ext = strtolower(pathinfo($file,PATHINFO_EXTENSION));

error_reporting(E_ALL);
ini_set('display_errors','On');

switch ($ext) {
  case "gif": $ctype="image/gif"; break;
  case "png": $ctype="image/png"; break;
  case "jpeg":
  case "jpg": $ctype="image/jpg"; break;
  default: $ctype="application/force-download";
}

if(!$fp=@fopen($file_full,'r')){
  die("Unable to open file");
} else {
  header("Content-Type: $ctype");
  while(!feof($fp)) {
    $buf = fread($fp, 4096);
    echo $buf;
  }
}
?>
Avatar billede Mik2000 Professor
13. juli 2011 - 22:51 #20
Hej igen

Har fået det til at vise billedet på en tom side nu med denne kode (fil: vis_billede.php)
<?php
$dir = './images/';
$file = '1234.jpg';
$file_full = $dir . $file;
$ext = strtolower(pathinfo($file,PATHINFO_EXTENSION));

error_reporting(E_ALL);
ini_set('display_errors','On');

switch ($ext) {
  case "gif":
      $ctype="image/gif";
      break;
  case "png":
      $ctype="image/png";
      break;
  case "jpeg":
  case "jpg":
      $ctype="image/jpeg";
      break;
  default:
      $ctype="application/force-download";
      break;
}

if(!$fp=@fopen($file_full,'r')){
  die("Unable to open file");
} else {
  header("Content-Type: $ctype");
  while(!feof($fp)) {
    $buf = fread($fp, 4096);
    echo $buf;
  }
}
?>

Så langt så godt.
Skriver jeg url til den side (vis_billede.php), viser den billedet som den skal tilsyneladende både med gif, jpg og png.

Næste skridt er så at få den til at vise det på en anden side hvor der i forvejen er kode og et design.

---------------------------------

Har prøvet følgende uden held:
1: Har kopieret hele koden hen der hvor billedet skal vises

2: Har requiret filen der hvor billedet skal vises

3: Har skrevet følgende der hvor billedet skal vises:
<img src="<?php require("vis_billede.php"); ?>" /> 

... ved alle ting sker der det at koden stopper med at køre når den når dertil

---------------------------------

Går jeg direkte ind på vis_billede.php så viser den som sagt billedet som den skal.
Avatar billede jakobdo Ekspert
13. juli 2011 - 22:58 #21
Du skal lave noget ala:

src="visbillede.php?image=billedet.jpg"

Og i visbillede.php sørger du for billedet.jpg bliver loadet fra det hemmelige sted. :o)
Avatar billede Mik2000 Professor
13. juli 2011 - 23:12 #22
Men i så fald - burde den så ikke kunne vise billedet med denne:
<img src="<?php require("vis_billede.php"); ?>" /> 

Hvor den bare henter et testbillede (det samme hver gang), for at prøve om den virker

Her burde den vel blot vise det billede som den viser hvis man går direkte ind på vis_billede.php

Men koden stopper bare når den kommer dertil, og den viser ikke billedet
Avatar billede jakobdo Ekspert
14. juli 2011 - 08:23 #23
Nej, for koden skal ikke inkluderes.
Det skal "kaldes".
Browseren kalder jo et billede og du giver den kode.

Det skal være:

<img src="vis_billede.php" />
Avatar billede Mik2000 Professor
14. juli 2011 - 17:43 #24
Nååh ja det er jo billedet - bliver ved med at tænke på det som et php dokument :)

Det virker nu. Tak for alt hjælpen endnu engang - du har fået point :)
Avatar billede jakobdo Ekspert
14. juli 2011 - 20:13 #25
Takker for point.
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