Рис. 8.4.Извлечение самой свежей статьи с сайта Straight Dope и отправка по электронной почте
№ 67. Создание веб-ориентированного фотоальбома
CGI-сценарии на языке командной оболочки способны обрабатывать не только текст. Многие веб-сайты поддерживают возможность создания фотоальбомов, позволяя выгрузить множество изображений и предоставляя программные средства, помогающие переупорядочивать их и просматривать. Как ни странно, простейший «альбом» фотографий в каталоге довольно легко реализовать в виде сценария на языке командной оболочки. Один из таких сценариев, содержащий всего 44 строки кода, представлен в листинге 8.8.
Листинг 8.8.Сценарий album
··#!/bin/bash
··# album — сценарий онлайн-фотоальбома
··echo "Content-type: text/html"
··echo ""
··header="header.html"
··footer="footer.html"
··count=0
··if [-f $header]; then
····cat $header
··else
····echo "
"
··fi
··echo "
"
··for name in $(file /var/www/html/* | grep image | cut −d: −f1)
··do
····name=$(basename $name)
····if [$count −eq 4]; then
······echo "
"
······count=1
····else
······echo "
|
"
······count=$(($count + 1))
····fi
····nicename="$(echo $name | sed 's/.jpg//;s/-/ /g')"
····echo "
····echo "src='../$name' height='200' width='200' border='1'>
"
····echo "$nicename"
··done
··echo "
|
"
··if [-f $footer]; then
····cat $footer
··else
····echo "
"
··fi
··exit 0
Бо́льшая часть этого кода реализует вывод разметки HTML для придания странице привлекательного внешнего вида. Уберите все команды echo, и останется простой цикл for, который перебирает файлы в каталоге /var/www/html
(корневой каталог веб-документов по умолчанию в Ubuntu 14.04), выявляя среди них изображения с помощью команды file.
При использовании этого сценария желательно следовать соглашению об именовании файлов, согласно которому пробелы в именах должны замещаться дефисами. Например, значение sunset-at-home.jpg в переменной name будет преобразовано последовательностью команд
в sunset at home и сохранено в переменной nicename. Это очень простое преобразование, но оно позволяет дать каждому изображению в альбоме понятное и удобочитаемое название, вместо бессмысленного, например DSC00035.JPG .
Чтобы опробовать этот сценарий, скопируйте его в каталог, заполненный изображениями JPEG и дайте ему имя index.cgi . Если ваш сервер настроен правильно, при попытке обратиться к каталогу он автоматически вызовет index.cgi при условии, что в этом каталоге отсутствует файл index.html . Теперь у вас есть свой быстрый и динамический фотоальбом.
Для каталога с фотографиями природы результат выглядит очень неплохо, как показано на рис. 8.5. Обратите внимание, что при наличии файлов header.html и footer.html в том же каталоге они автоматически будут включаться в вывод.
Усовершенствование сценария
Одно из ограничений этого сценария в том, что клиенту приходится загружать полноразмерные изображения. Если, к примеру, имеется десяток файлов изображений по 100 Мбайт каждый, то при медленном подключении ждать загрузки альбома придется довольно долго. Несмотря на маленький размер миниатюр на экране, размеры соответствующих им файлов не становятся меньше. Решение заключается в автоматическом создании масштабированных версий изображений, для чего можно было бы задействовать в сценарии, например, программу ImageMagick (сценарий № 97 в главе 14). К сожалению, очень немногие дистрибутивы Unix включают подобные развитые инструменты для работы с графикой, и, если вы пожелаете расширить возможности фотоальбома в этом направлении, для начала изучите описание программы ImageMagick, которое вы найдете по адресу: http://www.imagemagick.org/.
Рис. 8.5.Онлайн-фотоальбом, созданный 44-строчным сценарием на языке командной оболочки!
Читать дальше