GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
PHP: авторизация доступа(82161)
Как сделать Интернет-магазин?(65058)
Сессии в PHP(53951)
Веб-сайт: сборка по кирпичикам(29108)
СЕССИИ - обучение и /правильное/ использование(19301)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » PHP » Создание галереи с помощью PHP

Создание галереи с помощью PHP


Александр Тотоев
totoeval@mtu-net.ru


Предлагаю вашему вниманию пример программирования на языке php с использованием баз данных mysql (в одном из вариантов программы) на примере создания галереи фотографий, картинок и т.п. Картинки в предпросмотре должны быть определенной ширины (чтобы не расползалась страница). Подобный вариант используется мной здесь (2 вариант) и здесь (1 вариант).

Галерея имеет следующие свойства:

  • предпросмотр;
  • навигация "вперед-назад";
  • навигация по номерам страниц галереи;
  • наличие описаний к картинкам;
  • администрирование описаний к картинкам;
  • варианты 2 и 3 имеют возможность изменять порядок вывода картинок;
  • вариант 3 сделан с использованием базы mysql
  • варианты 1 и 3 легко преобразуемы в галерею с возможностью дополнения галереи посетителями;
  • если вы обнаружили еще какие-то свойства галереи, буду рад выслушать ваше мнение по адресу totoeval@mtu-net.ru
Вариант 1

Программа ищет файлы картинок в указанном ей каталоге с маленькими картинками (предпросмотр). Затем она ищет описания для выводимых картинок в текстовом файле. Определяет кол-во картинок и создает навигацию по галерее. Определяет размеры картинок и выводит их с описаниями и с яваскриптом на каждой картинке, который открывает большой вариант картинки в новом окне с размерами на 40 пикселей больше размера картинки с возможностью скроллинга, если таковой окажется необходим для просмотра картинки полностью (при малом размере экрана).

Вот собственно и код варианта:

  <html>
  <head>
  <TITLE>Photo-galery</TITLE>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1251">
  <LINK REL=STYLESHEET TYPE="text/css" href="../../style.css">

  </head>
  <body leftmargin=0 topmargin=0 marginwidth="0" marginheight="0">

  <table width=650 cellspacing=0 cellpadding=5 border=0 cols=2><tr><td>
  <div align="center">
  <br>
  <p align="center" class="zag-main">Картинная галерея.</p>
  <?

  // Пишем переменные, которые зависят от Вас

  // максимальное кол-во фоток на странице
  $scrpic=10; 
  // путь к большим картинкам
  $big='../pic/big_regats/'; 
  // путь к малым картинкам
  $small='../pic/small_regats/'; 
  // путь к файлу   с текстами к картинкам
  $ini=$DOCUMENT_ROOT.'/avrora/pic/read/read_regats.ini'; 

  // В данном случае, файл строится так: 
  // строка с названием картинки (без расширения файла)
  // затем строка с подписью к картинке
  // затем название следующей картинки и так далее.

  // Например:
  // 1
  // Моя первая фотография rt
  // моя фотография rt.jpg
  // ... и так до последней картинки. Если подписи к картинке нет, 
  // то надо оставлять пустую строку.

  $kav="'"; // одинарные кавычки пригодятся нам потом в таком виде
            // для отображения в браузере в яваскрипте. Там необходимо 
            // иметь оба вида кавычек, а для php надо еще поставить 
            // выводимое выражение в кавычки.
  $podp='увеличить'; // надпись под картинкой,
                     // побуждающая клиента нажать на картинку для 
                     // увеличения
  $style_zag2='zag2-main'; // стили текста на странице
$style_osn='osn-main'; // стили текста на странице
$style_link='link'; // стили текста на странице
// сама программа: // читаем файл с подписями к картинкам в массив $text $text=file($ini); // указываем путь к каталогу малых фотографий $dir=$small; // читаем заголовок каталога $handle=opendir($dir); // счетчик файлов в папке $si=0; while($file = readdir($handle)) { // читаем файл, пока не закончатся if($file!="..") {// исключаем из списка файлов "." и ".." (корень и верхний каталог). // присваиваем текущему элементу массива с именами файлов // имя текущего файла $pic[$si]=$file; // плюсуем к счетчику файлов в папке 1 $si++; } } // следующий файл // сколько файлов в папке с малыми картинками $maxpic=count($pic)-1; if($begin=="") { // если на страницу зашли впервые, то $begin присваеваем 1 $begin=1; } // $end - номер последней картинки на странице $end=$begin+$scrpic-1; if($end>$maxpic) {// если последний номер на странице больше кол-во картинок в папке, // то он равен последнему $end=$maxpic; } // при переходе назад, начинаем показывать картинки с номера, // равному "первый номер текущей страницы минус кол-во картинок на странице" $beginrew=$begin-$scrpic; // при переходе вперед, начинаем показывать картинки с номера, // равному "первый номер текущей страницы плюс кол-во картинок на странице"
$beginfw=$begin+$scrpic; $hrefrew='<a href='.$PHP_SELF. '?begin='.$beginrew.' class='.$style_zag2. '>назад</a>'; // создаем ссылку "назад" $hreffw='<a href='.$PHP_SELF.'?begin='.$beginfw. ' class='.$style_zag2.'>вперед</a>'; // создаем ссылку "вперед" // ставим между ссылками "назад-вперед" символ "||" $navig=$hrefrew.' || '.$hreffw; if($beginrew<=0) { // если мы на первой странице, то ссылка назад не нужна $hrefrew='<a href='.$PHP_SELF.'?begin='.$beginrew. ' class='.$style_zag2.'>назад</a>'; $navig=$hreffw; } if($beginfw>$maxpic) { // если мы на последней странице, то ссылка вперед не нужна $hreffw='<a href='.$PHP_SELF.'?begin='.$beginfw. ' class='.$style_zag2.'>вперед</a>'; $navig=$hrefrew; } // вывод на экран номеров страниц галереи // вычисляем, сколько страниц с картинками $scrmax=ceil($maxpic/$scrpic); for($scr=1; $scr<=$scrmax; $scr++) { // начиная с первого номера до кол-ва страниц галереи // вычисляем номер картинки, // с которого будут выводиться картинки на странице $beginsrc=($scr-1)*$scrpic+1; if($beginsrc==$begin) { // если страница текущая, то ее номер выводим в виде простого текста, // а не ссылки echo '  <span class='.$style_zag2. '>'.$scr.'</span>  '; } else { // если страница не текущая, то выводим ссылку на нее и передаем // параметры: // номер картинки, с которой начать выводить на этой странице echo ' <a href='.$PHP_SELF.'?begin='.$beginsrc. ' class='.$style_zag2.'> '.$scr.' </a> '; } } echo '<p align=center class='.$style_zag2.'>'.$navig. '</p>'; // вывод на экран навигации "вперед-назад" for($i=$begin; $i<=$end; $i++) { // начиная с первой картинки на странице, // перебираем картинки вплоть до последней на странице for($j=0; $j<sizeof($text); $j++) { // читаем файл ини и собираем описания //выделяем в названии файла его имя (без расширения) $name_file=explode(".",$pic[$i]); if(trim($text[$j])==$name_file[0]) { // ищем название картинки, // предварительно обрезав пробелы вокруг названия картинки в файле // (если текущее название картинки $pic[$i] совпадает с проверяемым $text[$j]) $descript=trim($text[$j+1]); // если картинка найдена, то в $descript пишем описание к картинке }else{ // если название картинки не совпадает с искомым, // то плюем на него } } $photo=$big.$pic[$i]; // присваиваем $photo имя малого файла+путь к папке с большими картинками // читаем информацию о картинке $size=getimagesize($photo); // получаем ширину картинки и + 40 (свободное поле вокруг картинки) $width=$size[0]+40; // получаем высоту картинки и + 40 (свободное поле вокруг картинки) $height=$size[1]+40; // получаем тип (расширение файла картинки) $sxp=$size[2]; $smphoto=$small.$pic[$i]; // присваиваем $smphoto имя малого файла+путь к папке с малыми картинками $smsize=getimagesize($smphoto); // читаем информацию о картинке $smwidth=$smsize[0]; // получаем ширину картинки $smheight=$smsize[1]; // получаем высоту картинки $smexp=$smsize[2]; // получаем тип (расширение файла картинки) $winstat='toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width='. $width.',height='.$height; // статус открываемого окна с большой картинкой // выводим таблицу галереи. // если номер картинки четный, то картинка слева, а описание справа и // наоборот делаем это для неужасного внешнего вида галереи // Вы можете разположить картинки как Вам заблагорассудится. // итак: ?><table width=420 cellspacing=0 cellpadding=5 border=0 cols=2><tr><? // выводим одинаковую часть кода таблицы дл ячейки картинки //Далее выводим картинки в ячейках таблиц с описаниями. Делаем все с "предпросмотром" //"предпросмотр предпочтителен, потому что не надо сразу грузить большие // файлы, а клиент если захочет, сам загрузит то, что его заинтересовало в новых // окнах. if($i/2==ceil($i/2)) { // если номер картинки на странице четный echo '<td width=210 rowspan=2> <p align=right class='.$style_osn.'>'.$descript.'</p> </td><td hight='.($smheight+2).'> <table width=202 cellspacing=1 cellpadding=0 border=0 bgcolor="#000000" border=0><tr><td> <a href='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');"> <img src='.$smphoto.' width='.$smwidth.' height='.$smheight.' border=0 alt="увеличить"> </a> </td></tr></table> </td></tr> <tr><td valign=top> <center> <a href='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');" CLASS='.$style_link.'>'.$podp.' </a> </center> </td></tr></table>'; }else { // если номер картинки нечетный echo '<td align=left><table width=202 cellspacing=1 cellpadding=0 border=0 bgcolor="#000000"><tr> <td hight='.($smheight+2).'> <a href='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');"> <IMG SRC='.$smphoto.' width='.$smwidth.' height='.$smheight.' border=0 alt="увеличить"> </a> </td></tr></table> </td> <td width=210 rowspan=2> <p align=left class='.$style_osn.'>'.$descript.'</p> </td></tr> <tr><td valign=top> <center> <a href='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');" CLASS='.$style_link.'>'.$podp.' </a> </center> </td></tr></table>'; } } // вывод на экран "вперед-назад" echo '<p align=center class='.$style_zag2.'>'.$navig.'</p>'; // вывод на экран номеров страниц echo '<div align=center>'; for($scr=1; $scr<=$scrmax; $scr++) { $beginsrc=($scr-1)*$scrpic+1; if($beginsrc==$begin) { echo '  <span class='.$style_zag2. '>'.$scr.'</span>  '; }else { echo ' <a href='.$PHP_SELF.'?begin='.$beginsrc. ' class='.$style_zag2.'> '.$scr.' </a> '; } } ?> </div> </td></tr></table> </body> </html>




Программа администрирования текстов описаний:

Была применена в моей статье "Импортирование информации с чужого сайта на свой сайт в свой дизайн". Я считаю этот способ самым проостым для начинающего программиста. Более сложный способ обновления я собираюсь сделать в будущих статьях.
Конечно, можно делать более серьезные интерфейсы, но в этом варианте, который конечно не рассчитан на ламера, можно быстро править сразу все позиции.
Вот собственно код:


  <html>
  <head>
  <title>admin weather</title>
  </head>
  <body>
  <?php
  // адрес файла, в котором и будут записываться названия файлов с описаниями
  $adr=$DOCUMENT_ROOT."/avrora/pic/read/read_regats.ini"; 
  $password='pass'; // простенькая система авторизации
  $eror='Password eror!';
  $old=file($adr); // читаем то, что сейчас есть в файле
  if($submit)
  { // проверяем на нажатость кнопки
   if($pass==$password)
   {
    $fp=fopen($adr,"w");
    fwrite ($fp, $ini); // записываем в файл измененные данные
    fclose($fp);
    $old=file($adr);
   }else{ echo $eror; }
  }
  ?>

  // информация, введенная в форму, обрабатывается этим же файлом
  <form method=post action="<?php echo $PHP_SELF?>"> 
  password:<input type=text name=pass><br>
  inicialisation:<textarea name="ini" rows=15 cols=60>
  <?
  for($i=0; $i<sizeof($old); $i++)
  {
   // выводим на экран текущий вариант файла
   echo $old[$i], ""; 
   }
  ?>
  </textarea>
  <br>
  <input type=submit name="submit" value="Enter">
  </form>

  </body>
  </html>
  




В этом варианте, файл создаем так, как написано в комментарии к программе:
1
Моя первая фотография
rt
моя фотография rt.jpg


, где 1 и rt - имена файлов, а строки под ними соответственно описания к ним.


Вариант 2


Отличие этого варианта отпредыдущего в том, что:
Программа читает файл инициализации галереи.
В каждой строке такая конструкция (так надо заполнять файл для этого варианта!):
1.jpg|Моя первая фотография
rt.jpg|моя фотография rt.jpg
где символ "|" - это разделитель между описанием и именем файла картинки.

Как видно, в этом варианте надо писать в файле имя файла картинки с расширением. Если это вам это очень мешает, то можете переделать так, чтобы было в файле только имя, а расширение определялось бы автоматически, основываясь на первом примере.
Алгоритм такого варианта будет:
определитьимя картинки, считать имена файлов в папке с файлами, обрезая у имен файлов расширения, находим нужный, сравнивая каждый раз с тем, что взяли из файла. Именно совпавший и будет искомым.

Далее программа, создав массив из имен и описаний картинок, определяет, на какой странице галереи клиент находится и выводит ему соответственно ту или иную страницу.
Сам движок галереи остается тем же, как вы наверное заметили.
Изменяются некоторые его части.
Вот сам код:


<html>
<head>
<TITLE>Photo-galery</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1251">
<LINK REL=STYLESHEET TYPE="text/css" href="../../style.css">
</head>
<body leftmargin=0 topmargin=0  marginwidth="0" marginheight="0">

<table width=650 cellspacing=0 cellpadding=5 border=0 cols=2><tr><td>
<div align="center">
<br>
<p align="center" class="zag-main">Картинная галерея.</p>
<?
// Пишем переменные, которые зависят от Вас

$scrpic=10; // максимальное кол-во фоток на странице
$big='../pic/big_regats/'; // путь к большим картинкам
$small='../pic/small_regats/'; // путь к малым картинкам
// путь к файлу с текстами к картинкам
$ini=$DOCUMENT_ROOT.'/avrora/pic/read/read_regats1.ini';
// В данном случае, файл строится так: строка с названием картинки (без расширения файла)
// затем строка с подписью к картинке
// затем название следующей картинки и так далее.

//Например:
//1|Моя первая фотография
//rt|моя фотография rt.jpg
//.... и так до последней картинки. Если подписи к картинке нет, то надо оставлять 
// пустую строку.

$kav="'"; // одинарные кавычки пригодятся нам потом в таком виде
          // для отображения в браузере в яваскрипте. Там необходимо иметь
          // оба вида кавычек, а для php надо еще поставить выводимое выражение 
          // в кавычки.
          
$podp='увеличить'; // надпись под картинкой,
                   // побуждающая клиента нажать на картинку для увеличения
                   
$style_zag2='zag2-main'; // стили текста на странице
$style_osn='osn-main'; // стили текста на странице
$style_link='link'; // стили текста на странице

//сама программа
$text=file($ini); // читаем файл с подписями к картинкам в массив $text
for($i=0; $si<sizeof($text); $i++)
{ // читаем файл ини и сохраняем имена картинок.
 $si=$i+1;
 $string=explode("|",$text[$i]);
 $pic[$si]=$string[0]; // присваиваем текущему элементу массива с именами 
                       // файлов имя текущего файла
 $description[$si]=$string[1];
}

$maxpic=count($pic); // сколько файлов в папке с малыми картинками
if($begin=="")
{ // если на страницу зашли впервые, то $begin присваеваем 1
 $begin=1;
}
$end=$begin+$scrpic-1; // $end - номер последней картинки на странице
if($end>$maxpic)
{ // если последний номер на странице больше кол-во картинок в папке,
  // то он равен последнему
 $end=$maxpic;
}
$beginrew=$begin-$scrpic; // при переходе назад, начинаем показывать 
                          // картинки с номера, равному "первый номер 
                          // текущей страницы минус кол-во картинок на странице"
$beginfw=$begin+$scrpic; // при переходе вперед, начинаем показывать картинки с 
                         // номера, равному "первый номер текущей страницы плюс 
                         // кол-во картинок на странице"

// создаем ссылку "назад"
$hrefrew='<a href='.$PHP_SELF.'?begin='.$beginrew.
         ' class='.$style_zag2.'>назад</a>';

// создаем ссылку "вперед"
$hreffw='<a href='.$PHP_SELF.'?begin='.$beginfw.
        ' class='.$style_zag2.'>вперед</a>';

// ставим между ссылками "назад-вперед" символ "||"
$navig=$hrefrew.' || '.$hreffw; 

if($beginrew<=0)
{ // если мы на первой странице, то ссылка назад не нужна
 $hrefrew='<a href='.$PHP_SELF.'?begin='.$beginrew.
          ' class='.$style_zag2.'>назад</a>';
 $navig=$hreffw;
}

if($beginfw>$maxpic)
{ 
 // если мы на последней странице, то ссылка вперед не нужна
 $hreffw='<a href='.$PHP_SELF.'?begin='.$beginfw.
         ' class='.$style_zag2.'>вперед</a>';
 $navig=$hrefrew;
}

// вывод на экран номеров страниц галереи

// вычисляем, сколько страниц с картинками
$scrmax=ceil($maxpic/$scrpic); 
for($scr=1; $scr<=$scrmax; $scr++)
{ // начиная с первого номера до кол-ва страниц галереи
 $beginsrc=($scr-1)*$scrpic+1; // вычисляем номер картинки,
                               // с которого будут выводиться картинки 
                               // на странице
 if($beginsrc==$begin)
 { // если страница текущая,
   // то ее номер выводим в виде простого текста, а не ссылки
  echo '  <span class='.$style_zag2.'>'.$scr.
              '</span>  ';
 }else
  { // если страница не текущая, то выводим ссылку на нее 
    // и передаем параметры:
    // номер картинки, с которой начать выводить на этой странице
   echo ' <a href='.$PHP_SELF.'?begin='.$beginsrc.
               ' class='.$style_zag2.'> '.$scr.' </a> ';
  }
 }
echo '<p align=center class='.$style_zag2.'>'.$navig.
            '</p>';
// вывод на экран навигации "вперед-назад"
for($i=$begin; $i<=$end; $i++)
{// начиная с первой картинки на странице,
 // перебираем картинки вплоть до последней на странице
 $descript=$description[$i];
 $photo=$big.$pic[$i]; 
 // присваиваем $photo имя малого файла+путь к папке с большими картинками
 $size=getimagesize($photo); // читаем информацию о картинке
 $width=$size[0]+40; // получаем ширину картинки и + 40 
                     // (свободное поле вокруг картинки)
 $height=$size[1]+40; // получаем высоту картинки и + 40 
                      // (свободное поле вокруг картинки)
 $sxp=$size[2]; // получаем тип (расширение файла картинки)
 $smphoto=$small.$pic[$i]; 
 // присваиваем $smphoto имя малого файла+путь к папке с малыми картинками
 $smsize=getimagesize($smphoto); // читаем информацию о картинке
 $smwidth=$smsize[0]; // получаем ширину картинки
 $smheight=$smsize[1]; // получаем высоту картинки
 $smexp=$smsize[2]; // получаем тип (расширение файла картинки)

 // статус открываемого окна с большой картинкой
 $winstat='toolbar=0,location=0,directories=0,status=0,menubar=0,'.
          'scrollbars=1,resizable=1,width='.$width.',height='.$height; 
          
// выводим таблицу галереи.
// если номер картинки четный, то картинка слева, а описание справа и наоборот
// делаем это для неужасного внешнего вида галереи
// Вы можете разположить картинки как Вам заблагорассудится.
// итак:
?><table width=420 cellspacing=0 cellpadding=5 border=0 cols=2><tr><? 
// выводим одинаковую часть кода таблицы дл ячейки картинки
// Далее выводим картинки в ячейках таблиц с описаниями. Делаем все с "предпросмотром"
// "предпросмотр предпочтителен, потому что не надо сразу грузить большие файлы,
// а клиент если захочет, сам загрузит то, что его заинтересовало в новых окнах.
//
 if($i/2==ceil($i/2))
 { // если номер картинки на странице четный
  echo '<td width=210 rowspan=2><p align=right CLASS='.
              $style_osn.'>'.$descript.'</p
  ></td><td hight='.($smheight+2).
  '><table width=202 cellspacing=1 cellpadding=0 border=0 '.
  'bgcolor="#000000" border=0><tr><td><A HREF='.$photo.
  ' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.
  ', '.$kav.$winstat.$kav.');">
  <IMG SRC='.$smphoto.' WIDTH='.$smwidth.' HEIGHT='.$smheight.
  ' BORDER=0 alt="увеличить"></A></td></tr></table
  ></td></tr><tr><td valign=top
  ><center><A HREF='.$photo.' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.
  ', '.$kav.$i.$kav.', '.$kav.$winstat.$kav.');" CLASS='.$style_link.'>'.$podp.
  '</a></center></td></tr></table>';
 }else
  { // если номер картинки нечетный
   echo '<td align=left><table width=202 cellspacing=1 cellpadding=0 border=0 bgcolor="#000000">'.
               '<tr><td hight='.($smheight+2).'><A HREF='.$photo.
               ' target="'.$i.'" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.
               ', '.$kav.$winstat.$kav.');"><IMG SRC='.$smphoto.' WIDTH='.$smwidth.
               ' HEIGHT='.$smheight.' BORDER=0 alt="увеличить"></A></td>'.
               '</tr></table></td>'.
               '<td width=210 rowspan=2><p align=left CLASS='.$style_osn.'>'.
               $descript.'</p
               ></td></tr><tr><td valign=top
	       ><center><A HREF='.$photo.' target="'.$i.
	       '" onclick="window.open('.$kav.$photo.$kav.', '.$kav.$i.$kav.
	       ', '.$kav.$winstat.$kav.');" CLASS='.$style_link.'>'.$podp.
	       '</a></center></td></tr></table>';
  }
 }
// вывод на экран "вперед-назад"
echo '<p align=center class='.$style_zag2.'>'.$navig.
            '</p>';
// вывод на экран номеров страниц
echo '<div align=center>';
for($scr=1; $scr<=$scrmax; $scr++)
{
 $beginsrc=($scr-1)*$scrpic+1;
 if($beginsrc==$begin)
 {
  echo '  <span class='.$style_zag2.
              '>'.$scr.'</span>  ';
 }else
  {
   echo ' <a href='.$PHP_SELF.'?begin='.$beginsrc.
               ' class='.$style_zag2.'> '.$scr.' </a> ';
  }
 }

?>

</div>
</td></tr></table>
</body>
</html>




Программа администрирования та же, что и в варианте 1.


Вариант 3



В этом варианте используется база данных mysql вместо текстового файла для хранения описаний, имен картинок и порядка их следования.
Здесь тоже в базе хранятся именя файлов с расширениями (при варианте без расширений, будет тратиться время на пиоск картинки по описанному выше алгоритму, а при заливке картинок через вэбинтерфейс проще хранить имена файлов с расширениями).
Алгоритм работы программы такой же, что и в предыдущем примере. Однако, вместо считывания файла, считывается база галереи. Для ускорения можно было бы поместить операцию считывания в цикл вывода картинок на экран и не считывать все строки базы.
Для создания таблицы базы картинок используйте этот скрипт:

  <?
  //инициализация mysql:
  $mysql_login='login';
  $mysql_host='host';
  $mysql_pass='password';
  $mysql_db='db';


  mysql_connect($mysql_host,$mysql_login,$mysql_pass);
  mysql_select_db($mysql_db);
  mysql_query("set CHARACTER SET cp1251_koi8") 
    or die ("!--не могу записать"); 
  // эта строка используется, если сайт в кодировке win, а база в 
  // кодировке кои-8.Если кодировки совпадают, строку надо закомментировать.

  $query="CREATE TABLE galery_regats (numer tinyint(4) NOT NULL, name text 
  NOT NULL, description text NOT NULL)";
  $res=mysql_query($query) 
    or die ("!--не могу создать таблицу");

  // переход на страницу администрирования
  header("location: admin.php"); 


  ?>

  Программа администрирования: 

  <html>
  <head>
  <title>Admin galery</title>
  <link rel=stylesheet type="text/css" href="../../style.css">
  </head>
  <body bgcolor=#eeeeee>
  <br>

  <?
  // логин/пароль
  $log='total';
  $pas='total';
  //инициализация 
  mysql:
  $mysql_login='login';
  $mysql_host='host';
  $mysql_pass='password';
  $mysql_db='db';
  //
  $style_zag2='zag2-main'; // стили текста на странице
  $style_osn='osn-main'; // стили текста на 
  странице$style_link='link'; // стили текста на странице
  $kon_str="\n"; // конец строки
  $razdel="|"; // разделитель между именем картинки и описанием
  ?>
  <p align="center" class="<? echo $style_zag2; ?>">Картинная галерея.</p>
  <?
  mysql_connect($mysql_host,$mysql_login,$mysql_pass);
  mysql_select_db($mysql_db);
  mysql_query("set CHARACTER SET cp1251_koi8") 
      or die ("!--не могу записать");

  switch ($prov) { // проверяем состояние переменной $prov
  case "edit":

  // если пишем новый вариант базы:
  if ($login!=$log || $pass!=$pas)
  { 
   echo "Введите правильно логин/пароль"; 
  } // если пароль неверен
  else
   {
    // удаляем текущую базу картинок и создаем пустую таблицу
    $query="DROP TABLE galery_regats"
    $res=mysql_query($query) 
      or die ("!--не могу удалить таблицу");
    $query="CREATE TABLE galery_regats (numer tinyint(4) NOT NULL, name text NOT NULL, description text NOT NULL)";
    $res=mysql_query($query) or die ("!--не могу создать таблицу");
    // бьем наш список по символу переноса строки
    $pics=explode($kon_str,$block);
    for($i=0; $i<sizeof($pics); $i++)
    { // пишем в базу данные

     // бьем строки по символу разделителя
     $string=explode($razdel,$pics[$i]); 
     $query="insert into galery_regats (number,name,description) values ('$i','$string[0]','$string[1]')";
     mysql_query($query)
        or die ("!--не могу записать"); // пишем в таблицу
    }
  }
  break;
  default: 
  // если мы зашли не по нажатию на ентер:
  // читаем базу картинок и сохраняем в массивы
  $zapros="select * from galery_regats order by numer";
  $res=mysql_query($zapros);
  $kol=mysql_num_rows($res);
  if($kol==0)
  {
   echo "<span class=$style_osn>Нет картинок в галерее.</span>";
  }
  for($i=0;$i<$kol;$i++)
  { // читаем базу и сохраняем имена картинок.

   // присваиваем текущему элементу массива
   $pic[$i]=mysql_result($res,$i,"name"); 
   $description[$i]=mysql_result($res,$i,"description");
  }
  break;
  }
  }
  ?>
  <form method=post action="<? echo $PHP_SELF; ?>">
  <textarea name="block" rows="40" cols="40">
  <?
  // выводим текущее состояние базы картинок
  for ($i=0; $i<sizeof($pic); $i++) {
  echo $pic[$i].$razdel.$description[$i].$kon_str;
  }
  ?>
  </textarea>
  <input type="text" name="login" size="10">
  <input type="text" name="pass" size="10">
  <input type="hidden" name="prov" 
  value="edit"><input type="submit" name="enter" value="Enter">
  </form>
  </body>
  </html>

  
  Форма заполняется как и во втором варианте.

  А для получения 3-го варианта в коде программы 2-го варианта строки от строки 
  //сама программа
  до строки
  $maxpic=count($pic); // сколько файлов в папке с малыми картинками

  которые являются блоком считывания файла в массивы,
  заменяются на блок:

  // соединение с базой (коннект)
  mysql_connect($mysql_host,$mysql_login,$mysql_pass); 
  mysql_select_db($mysql_db); // выбор базы
  mysql_query("set CHARACTER SET cp1251_koi8")
   or die ("-------------не могу записать");
  // Если кодировки базы и сайта совпадают - закомментировать эту строку

  $zapros="select * from galery_regats order by numer";
  $res=mysql_query($zapros);
  $kol=mysql_num_rows($res);
  if ($kol==0) {
  echo "Нет картинок в галерее.";
  }
  for ($i=0; $i<$kol; $i++) { // читаем файл ини и сохраняем имена картинок.
  $si=$i+1;
  // присваиваем текущему элементу массива с именами файлов имя текущего файла
  $pic[$si]=mysql_result($res,$i,"name"); 

  $description[$si]=mysql_result($res,$i,"description");
  }
  


Результат работы блока точно такой же, что и во втором варианте - массивы $pic и $description, где храним имена файлов картинок и описания к ним. Но работает такая галерея быстрее. Однако, каждый раз, когда хотите залить новую картинку, надо администрить галерею, даже если не нужно описание. А в первом варианте стоит только лишь закинуть в папки файлы картинок.


Таким образом, получаем 3 рабочих варианта программы галереи.

 
11.02.2003
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.