Gå til innhold

PHP vis bilder i mappe


Anbefalte innlegg

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?

 

 

 

Lenke til kommentar
Videoannonse
Annonse

 

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?

Lenke til kommentar

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.

Lenke til kommentar

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
Lenke til kommentar

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);

?>
Lenke til kommentar

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.
Lenke til kommentar
  • 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å
×
×
  • Opprett ny...