2014年8月10日日曜日

Bourne ShellでCGI

Get,Post,Putで渡されたパラメータを取得するBourne ShellによるCGI
設定ファイルはcgi.configに記入しておく。
受け取るパラメータは18~19行目のように取得する。
Apacheからのデータは以下の環境変数を介して受け取る。
  • REQUEST_METHOD:GET,PUT,POST,DELETEが入る
  • QUERY_STRING:GETの場合のパラメータ
  • CONTENT_LENGTH:PUTの場合のパラメータの長さ
31行目はヒアドキュメント内でのコマンド例として無駄にechoしています。

#! /bin/sh
BASE_DIR=`dirname $0`
BASE_DIR=`cd ${BASE_DIR} && pwd`                   # Change to full path
BASENAME=`basename $0 | sed -e "s/\.[^.]*$//"`     #Except extension
CONFIG="${BASE_DIR}/cgi.config"
if [ ! -f "${CONFIG}" ]; then
  echo "Content-type: text/html"
  echo ""
  echo "<html><body>${CONFIG} is not found.</body></html>"
  exit
fi
. "${CONFIG}"

PARMS=`echo ${QUERY_STRING} | tr \& "\n"`
if [ "${REQUEST_METHOD}" = "POST" -o "${REQUEST_METHOD}" = "PUT" ]; then
  PARMS=`dd bs=${CONTENT_LENGTH} | tr \& "\n"`
fi
USER=`echo "${PARMS}" | grep user | cut -d= -f 2 | nkf --url-input`
DATE=`echo "${PARMS}" | grep date | cut -d= -f 2 | nkf --url-input`

cat <<END
Content-type: text/html

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>${CONFIG_TITL}E</title>
  </head>
  <body>
    <div>Input parameters
    <div>`echo "${PARMS}"`</div>
    <div>User:${USER}</div>
    <div>Date:${DATE}</div>
  </body>
</html>
END
定義ファイルcgi.configには以下のように設定。
CONFIG_TITLE="CGI Sheel Test"

0 件のコメント:

コメントを投稿