Gå til innhold

PHP vis bilder i mappe


Anbefalte innlegg

Skrevet

Hei.

 

Prøver å tilpasse et php dokument til å vise alle bilder i en mappe.

 

Mine koder:

 

galleri.php:

<?php
    $dir = 'img/';
    $file_display = array('jpg', 'jpeg', 'png', 'gif');

    if (file_exists($dir) == false) 
    {
        echo 'Directory "', $dir, '" not found!';
    } 
    else 
    {
        $dir_contents = scandir($dir);

        foreach ($dir_contents as $file) 
        {
            $file_type = strtolower(end(explode('.', $file)));
            if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true)     
            {
                $name = basename($file);
                echo "<img src='img.php?name={$name}' />";
            }
        }
    }
?>

img.php:

<?php
    $name = $_GET['name'];
    $mimes = array
    (
        'jpg' => 'image/jpg',
        'jpeg' => 'image/jpg',
        'gif' => 'image/gif',
        'png' => 'image/png'
    );

    $ext = strtolower(end(explode('.', $name)));

    $file = '/home/users/Pictures/'.$name;
    header('content-type: '. $mimes[$ext]);
    header('content-disposition: inline; filename="'.$name.'";');
    readfile($file);
?>

Jeg har 2 jpg-filer i mappa img, men når jeg kjører koden vises bare to "brutte bildelinker".

 

Kan noen hjelpe?

 

 

 

Videoannonse
Annonse
Skrevet

Tja... ser ikke noe feil med det første, men har du sjekket at:

 

1) Sjekk at img src path er korrekt i nettleseren

2) Kjør img.php direkte og se hvilken feilmelding du får da

Skrevet

Hvorfor ser galleri.php i 'img/' og img.php i '/home/users/Pictures/'

 

Ser ikke ut som du har noen sikkerhet. Prøv img.php?name=../../../etc/passwd

Skrevet

Hvorfor ser galleri.php i 'img/' og img.php i '/home/users/Pictures/'?

galleri.php genererer html, og refererer til img.php som ligger i img mappa. img.php henter frem selv bildet. (etter hva jeg kan se)
Skrevet

 

Hvorfor ser galleri.php i 'img/' og img.php i '/home/users/Pictures/'?

galleri.php genererer html, og refererer til img.php som ligger i img mappa. img.php henter frem selv bildet. (etter hva jeg kan se)

 

 

Men hvorfor ser de etter de samme bildefilene i 2 forskjellige mapper?

Skrevet

Gjør ikke det, bildene hentes kun fra ett sted. Hendelses forløpet er slik:

 

Nettleseren ber om galleri.php, når <img> tag'ene lastes så sendes en forespørsel til img.php for hver tag, img.php svarer da med å laste forespurt bilde.

På denne måten kan man hente frem filer som ligger utenfor public html/web mappen.

Skrevet (endret)

Gjør ikke det, bildene hentes kun fra ett sted. Hendelses forløpet er slik:

 

Nettleseren ber om galleri.php, når <img> tag'ene lastes så sendes en forespørsel til img.php for hver tag, img.php svarer da med å laste forespurt bilde.

På denne måten kan man hente frem filer som ligger utenfor public html/web mappen.

 

Nei. Les koden en gang til. La OP svare for seg selv.

 

galleri.php ser i undermappen "img" av den mappen den er i. Lager link til "img.php?name=filnavn.jpg" uten mappenavn. img.php må derfor være i samme mappe for at linken skal fungere.

 

img.php ser i en spesifikk mappe "/home/users/Pictures/filnavn.jpg" der filnavnet er uten img/ biten som brukes i galleri.php.

Endret av OISNOT
Skrevet

Tusen takk for mange gode svar. Feilen min var at filene refererte til to ulike plasseringer, begge skulle referere til img/.

 

Nå fungerer det fint. Legger ved den fungerende koden i tilfelle noen har bruk for den.

 

Kunne tenkt meg å sette en størrelsesbegrensning på bildene da noen bilder blir veldig store, er det noen som vet hvor i koden jeg kan gjøre det?

 

galleri.php

<?php

    $dir = 'img/';

    $file_display = array('jpg', 'jpeg', 'png', 'gif');



    if (file_exists($dir) == false) 

    {

        echo 'Directory "', $dir, '" not found!';

    } 

    else 

    {

        $dir_contents = scandir($dir);



        foreach ($dir_contents as $file) 

        {

            $file_type = strtolower(end(explode('.', $file)));

            if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true)     

            {

                $name = basename($file);

                echo "<img src='img.php?name={$name}' />";

            }

        }

    }

?>


img.php

<?php

    $name = $_GET['name'];

    $mimes = array

    (

        'jpg' => 'image/jpg',

        'jpeg' => 'image/jpg',

        'gif' => 'image/gif',

        'png' => 'image/png'

    );



    $ext = strtolower(end(explode('.', $name)));



    $file = 'img/'.$name;

    header('content-type: '. $mimes[$ext]);

    header('content-disposition: inline; filename="'.$name.'";');

    readfile($file);

?>
Skrevet

Regner med du tenker på høyde og bredde, det gjør du i css

.smallImg {
    width: 30%;
    height: 30%;
}
echo "<img class='smallImg' src='img.php?name={$name}' />";
Vil fremdeles laste ned det store bildet, noe som kan gjøre siden treg å laste. Vil nok være bedre å ha en thumbnail fil og en orginal fil, hvor img.php da henter thumbnailen som standard, og tar ett ekstra parameter for å vise orginal bildet.
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...