Введение в CGI


Стандартный поток ввода


По большому счету, для чтения данных из стандартного потока ввода в рамках программирования CGI-скриптов bash непригоден. Дело в том, что в нем нет механизма посимвольного считывания данных. Bash-скрипт способен читать только строками и останавливает считывание лишь в случае появления в потоке символа конца файла. Как известно, HTTP-сервер такого символа в стандартный поток ввода скрипта при работе по методу POST не передает. Тем не менее чтение стандартного ввода в рамках программирования CGI-скриптов на bash применяется.

Примером тому может служить генерация гипертекстовых ссылок на файлы текущего каталога:

#!/usr/freeware/bin/bash echo Content-type: text/html echo echo '<HTML><HEAD></HEAD><BODY>' echo '<Ul>' ls -a | while read x do if test -f $x; then echo '<LI><A HREF=./'$x'>'$x'</A>'; fi done echo '</BODY></HTML>'

В данном случае команда ls доставляет в скрипт имена файлов. Один файл — это отдельная строка. Эти имена обрамляются гипертекстовыми ссылками и вставляются в HTML-страницу. При этом печатаются только обычные файлы, все остальные игнорируются.

Другой пример — фильтрация. При приеме по методу GET запрос размещается в переменной QUERY_STRING. Но он там находится в форме form-urlencoded. Для его фильтрации вызывается внешняя программа, стандартный вывод которой перенаправляется на стандартный ввод одной из команд скрипта:

echo $QUERY_STRING | tr '+' ' ' | while read x do for y in $x do echo $y done done

Существуют и другие способы применения чтения из стандартного ввода при программировании CGI-скриптов на BASH.



Содержание раздела