PHP / GD - эскизы фотографий в галерее: случайное отображение

У меня только базовые навыки в php, и мне пришлось разместить фотогалереи на сайте. Поскольку этот веб-сайт будет использоваться людьми, которые мало разбираются в программировании, я хотел простое использование: загрузить папку с фотографиями (редактировать: через FTP), миниатюры фотогалереи отображаются автоматически, и щелчок по миниатюре отобразит полный размер изображения.

Я использовал скрипт, который на лету генерирует эскиз. Кажется, что этот сценарий работает нормально, если я вызываю его прямо в браузере. Я получаю свой эскиз. Но когда я показываю галерею на своей странице, где каждый источник изображения является вызовом моего скрипта, отображается только случайное подмножество миниатюр, остальные отображают только замещающий текст. Например, в галерее из 8 при первом отображении страницы я могу получить только 3,4 и 7, а после обновления 1,3,5,6,8:

Я не смог найти сообщения об ошибке, выданного другими большими пальцами, которые не загружаются, но здесь мои базовые навыки в php могут меня подвести, возможно, я просто не знал, где найти такое сообщение об ошибке.

Вот призыв к моему сценарию:

<a href="resources/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
Ok. Может быть, это ошибка пути? Находится mini.php в подпапке. Потому что, если это так и вы вызываете его из изображения, то, возможно, ваш '$ dir.' / '' Больше не подходит ... Если нет, извините, я не нашел никакого решения ... - person Romain Bruckert; 06.02.2012