PHP/GD - миниатюри на снимки в галерия: показване на случаен принцип

Имам само основни умения в php и трябваше да поставя фото галерии на уебсайт. Тъй като този уебсайт ще се използва от хора, които не разбират много от програмирането, исках проста употреба: качете папка със снимки (редактиране: през FTP), миниатюрите на фотогалерията се показват автоматично и щракване върху миниатюрата ще покаже пълния размер на изображението.

Използвах скрипт, който генерира миниатюра в движение. Този скрипт просто изглежда работи добре, ако го извикам директно в браузъра. Получавам миниатюрата си. Но когато покажа галерия в моята страница, като всеки източник на изображение е извикване на моя скрипт, се показват само случайни подмножества от миниатюри, а другите показват само алтернативния текст. Например, в галерия от 8, първият път, когато покажа страницата, може да получа само 3,4 и 7, а след опресняване 1,3,5,6,8:

Не можах да намеря съобщение за грешка, дадено от другите палци, които не се зареждат, но тук основните ми умения в php може да ме провалят, може би просто не знаех къде да намеря такова съобщение за грешка.

Ето извикването на моя скрипт:

<a href="/bgresources/galleries/example.jpg"><img src="mini.php?f=example.jpg" alt="Photo" /></a>

и mini.php използва GD:

<?php
$ratio = 150;  
$dir = './resources/galleries';  

if (!isset($_GET['f'])) { 
    header('location: index.php'); 
    exit();  
}  
else { 
    $image = $_GET['f'];
    $tableau = @getimagesize($dir.'/'.$image); 
    if ($tableau == FALSE) { 
        header('location: index.php'); 
        exit(); 
    } 
    else { 
        // if jpeg
        if ($tableau[2] == 2) { 
          $src = imagecreatefromjpeg($dir.'/'.$image); 
          if ($tableau[0] > $tableau[1]) { 
            $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
          } 
          else { 
            $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
          }
          header ("Content-type: image/jpeg"); 
          imagejpeg ($im); 
        }
        elseif ($tableau[2] == 3) { // PNG
            $src = imagecreatefrompng($dir.'/'.$image); 
            if ($tableau[0] > $tableau[1]) { 
              $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
              imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
            } 
            else { 
              $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
              imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
            } 
            header ("Content-type: image/png"); 
            imagepng ($im); 
        }
    }
}  
?>

Някаква идея?


person Steph    schedule 04.02.2012    source източник


Отговори (1)


Казвате, че потребителите качват ПАПКА на вашия уебсайт? Възможно ли е имената на снимките да имат специални знаци или интервали, които не проверявате при качване?

person Romain Bruckert    schedule 04.02.2012
comment
Всъщност това е просто качване по ftp извън уебсайта, така че не, имената на файловете не се проверяват. Но ето, проверих два пъти имената и няма проблем. Във всеки случай, както казах, всяка миниатюра ще се показва понякога и всички работят, когато миниатюрата се извика директно в браузъра. - person Steph; 04.02.2012
comment
Добре. Може ли да е грешка в пътя? Е mini.php в подпапка. Защото ако случаят е такъв и го извиквате от изображението, тогава може би вашият '$dir.'/'' вече не е правилен... Ако не, съжалявам, че не намерих никакво решение... - person Romain Bruckert; 06.02.2012