Avatar billede compac Seniormester
24. februar 2012 - 17:39 Der er 10 kommentarer og
1 løsning

Billede i slideshow

Jeg har et slideshow. Det fungerer tilsyneladende godt nok, billederne skifter når man trykker Next Previous osv.
Det vil sig: billederne viser sig kun som en lille firkant uden indhold. Undersøger man med Egenskaber er det det rigtige billede, med den korrekte sti.
Her er koden:

<?php

define ('IMGDIR', 'c://wamp/www/slideshow1/images/show/');
define ('WEBIMGDIR', '/images/show/');
define ('SS_SESSNAME', 'slideshow_sess');
$err = '';
session_name(SS_SESSNAME);
session_start();
$ss = new slideshow($err);
if (($err = $ss->init()) != '')
{
    header('HTTP/1.1 500 Internal Server Error');
    echo $err;
    exit();
}
$ss->get_images();
list($curr, $caption, $first, $prev, $next, $last) = $ss->run();

class slideshow
{
    private $files_arr = NULL;
    private $err = NULL;
   
    public function __construct(&$err)
    {
        $this->files_arr = array();
        $this->err = $err;
    }
    public function init()
    {

        if (!$this->dir_exists())
        {
     
            return 'Error retrieving images, missing directory';
        }
        return '';
    }
    public function get_images()
    {
        if (isset($_SESSION['imgarr']))
        {
            $this->files_arr = $_SESSION['imgarr'];
        }
        else
        {
            if ($dh = opendir(IMGDIR))
            {
                while (false !== ($file = readdir($dh)))
                {
                    if (preg_match('/^.*\.(jpg|jpeg|gif|png)$/i', $file))
                    {
                        $this->files_arr[] = $file;
                    }
                }
                closedir($dh);
            }
            $_SESSION['imgarr'] = $this->files_arr;
        }
    }
    public function run()
    {
        $curr = 1;
        $last = count($this->files_arr);
        if (isset($_GET['img']))
        {
            if (preg_match('/^[0-9]+$/', $_GET['img'])) $curr = (int)  $_GET['img'];
            if ($curr <= 0 || $curr > $last) $curr = 1;
        }
        if ($curr <= 1)
        {
            $prev = $curr;
            $next = $curr + 1;
        }
        else if ($curr >= $last)
        {
            $prev = $last - 1;
            $next = $last;
        }
        else
        {
            $prev = $curr - 1;
            $next = $curr + 1;
        }
        // line below sets the caption name...
        $caption = str_replace('-', ' ', $this->files_arr[$curr - 1]);
        $caption = str_replace('_', ' ', $caption);
        $caption = preg_replace('/\.(jpg|jpe?g|gif|png)$/i', '', $caption);
        $caption = ucfirst($caption);
        return array($this->files_arr[$curr - 1], $caption, 1, $prev, $next, $last);
    }
    private function dir_exists()
    {
        return file_exists(IMGDIR);
    }
   
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Slideshow</title>
    <style type="text/css">
    body{margin: 0;padding: 0;font: 100% Verdana, Arial, Helvetica, sans-serif;font-size: 14px;}
    div#gallery{border: 1px #ccc solid;width: 600px;margin: 40px auto;text-align: center;}
    div#gallery img{margin: 20px;border: 2px #004694 solid;}
    div#gallery p{color: #004694;}
    div#gallery div.pn{padding: 10px;margin: 0 5px;border-top: 1px #ccc solid;}
    a{color:#333;}
    a:hover{color:#cc0000;}
    a.sp{padding-right: 40px;}
    </style>
</head>
<body>
    <div id="gallery">
    <img src='<?php echo WEBIMGDIR;?><?php echo $curr;?>'>
        <?php echo WEBIMGDIR;?> 
    <p><?php echo $caption;?></p>
      <div class="pn">
            <a href="?img=<?php echo $first;?>">First</a> | <a href="?img=<?php echo $prev;?>" class="sp">Previous</a><a href="?img=<?php echo $next;?>">Next</a> | <a href="?img=<?php echo $last;?>">Last</a>
        </div>
    </div>
</body>
</html>
Avatar billede olsensweb.dk Ekspert
24. februar 2012 - 17:47 #1
>define ('IMGDIR', 'c://wamp/www/slideshow1/images/show/');
uden at læst coden igennem, men er er du sikker på din web user har rettigheder tilat læse direkte fra C drevet ??, det ligger jo uden for web scopet
Avatar billede olsensweb.dk Ekspert
24. februar 2012 - 17:52 #2
hvorom altig er, vil det ikke virker når det kommer på en web server ude i byen, da der ikke er adgang til C drevet
Avatar billede compac Seniormester
24. februar 2012 - 17:53 #3
Nej, det er blot mens jeg skriver programmet. Det vil jeg senere rette til.
Avatar billede olebole Juniormester
24. februar 2012 - 18:16 #4
<ole>

Hvorfor ikke bare skrive den rigtige sti til at begynde med?  =)

/mvh
</bole>
Avatar billede compac Seniormester
24. februar 2012 - 22:32 #5
Nu har jeg fået korrigeret den første linie:

define ('IMGDIR', 'home/www/slideshow1/images/show/');

-Skal vi så komme til spørgsmålet: Hvorfor kan mit billede ikke vises når dets egenskaber er korrekte?
Avatar billede olebole Juniormester
24. februar 2012 - 23:10 #6
*tsk-tsk* det ville være klædeligt, om du fik armene lidt ind til kroppen! Hvis du nu skrev den korrekte sti - og du vidste, hvordan en korrekt sti skal se ud, når du tjekker egenskaberne på en webfil - kan vi sikkert godt komme videre!  *o)

Jeg vil derfor foreslå, du prøver:

define ('IMGDIR', '/slideshow1/images/show/');

Over HTTP-protokollen giver 'home/www/slideshow1/images/show/' jo ikke megen mening
Avatar billede olebole Juniormester
24. februar 2012 - 23:20 #7
Hmmm, det er muligvis ikke der, du laver fejl. Der er et eller andet, som ikke passer. Hvis dine filer ligger her:


- kan denne sti ikke være korrekt:

define ('WEBIMGDIR', '/images/show/');

Den må i så fald skulle være:

define ('WEBIMGDIR', '/slideshow1/images/show/');

Hvad fejlen præcist er, kan jeg ikke se udfra koden. Kun at en af stierne er forkert.
Avatar billede compac Seniormester
25. februar 2012 - 13:43 #8
Det har du helt ret i olebole. Tak for hjælpen - læg et svar
Avatar billede olebole Juniormester
25. februar 2012 - 13:52 #9
Selvtak - og ellers tak. Jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)

Jeg går udfra, det var din WEBIMGDIR, der var forkert - men hvad angår den anden, kan du gøre den væsentligt mere portabel, hvis du skriver:

define ('IMGDIR', $_SERVER['DOCUMENT_ROOT'].'slideshow1/images/show/');

Så indeholder konstanten altid den korrekte sti - både lokalt og på serveren  *o)
Avatar billede compac Seniormester
25. februar 2012 - 13:54 #10
PS hvis det har nogen interesse glemte jeg lige at nævne, at det var define ('WEBIMGDIR', '/slideshow1/images/show/'); der skulle tilrettes.
Avatar billede compac Seniormester
25. februar 2012 - 13:56 #11
Tak, jeg vil følge dit sidste råd også.
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