[Up] [Next] [Previous]

入力データの取り出し方法

フォーム形式のデータから入力データを取り出す方法はいろいろあります。フォー ム形式で定められた NAME属性で付けられた名前とその値の組でデー タを構成した方が取扱いが楽です。そして、入力データには次のような形式を 持っています。
Name1=Your+Name&Name2=Data&Name3=YES
そして、サーバ側で入力データを簡単に取り出すツールには次のようなものが あります。

cgiparse

cgiparseプログラムはCERN httpdに含まれているユーティリティプロ グラムです。CERN固有のものなので、他のサーバで利用するのは難しいでしょ う。単純にCGIスクリプト内に cgiparse を実行すれば、 FORM_theNameに収められます。/bin/sh から呼ぶには、
eval '/usr/local/www/cgi-bin/cgiparse -form'
とするだけです。ここで注意するのは、CGIスクリプトからcgiparseを呼ぶ場 合、コマンドのフルパス名を記述するか、PATH変数あらかじめ指定しておく必 要があります。

uncgi

uncgiは、Steven Grimm 氏がC言語で作ったcgiparseと似た機能を持つプログ ラムです。cgiparseよりもPOST形式の取り出しが簡単です。uncgiは cgi-bin ディレクトリにインストールし、ACTION部でuncgiを指定します。次 のようなフォームを指定していて、
<FORM METHOD=POST ACTION="/cgi-bin/myscript.cgi">
uncgi を使用してデータを取り出す場合、実行するCGIスクリプトの前にパス 指定で置きます(ちょうど親ディレクトリのように見えます)。cgiparseのよう に、CGIスクリプトの中に記述する必要がないので非常に便利です。
<FORM METHOD=POST ACTION="/cgi-bin/uncgi/myscript.cgi">

cgi-lib.pl

cgi-lib.plパッケージは、Steve Brenner氏が作った Perl ライブラリ で、CGIスクリプトを Perl で記述した場合に用いられます。GETやPOSTにも対 応しており、結果を Perl の連想配列に入れ込みます。このライブラリの使用 方法はスクリプトの最初に次のコードを加え、CGI用 Perl ライブラリを呼び 出せるようにします。
require 'cgi-lib.pl'
そして、データを読み込む場合、
&ReadParse(*data);
とします。そうすると、data配列に入れられ、 $data{theName}形式で取り出すことができます。

#!/usr/bin/perl

print "Content-type: text/html\n\n";

require 'cgi-lib.pl';
&ReadParse(*data);

print <<EOD

<HEAD>
<TITLE>Results</TITLE>
</HEAD>
<BODY>
<H2>Results</H2>
EOD

print "<B>$data{'theName1'}</B> is first data.<P>";

print "</BODY>"

Perl 簡易ライブラリ

Steve Brenner氏が作った cgi-lib.pl の古い版のライブラリも便利です。こ のライブラリの仕組みは、次のようになっています。 ライブラリは、次のサブルーチンをCGI引数を読み込むファイルのどこかに置 き、

sub read_input
{
    local ($buffer, @pairs, $pair, $name, $value, %FORM);
    # Read in text
    $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
    if ($ENV{'REQUEST_METHOD'} eq "POST")
    {
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    } else
    {
	$buffer = $ENV{'QUERY_STRING'};
    }
    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs)
    {
	($name, $value) = split(/=/, $pair);
	$value =~ tr/+/ /;
	$value =~ s/%(..)/pack("C", hex($1))/eg;
	$FORM{$name} = $value;
    }
    %FORM;
}

入力処理のときに

%form = &read_input;

とすれば、$form{'theName'}で取り出すことができます。

cgic

cgicThomas Boutell氏が開発した CGI プログラミングのための ANSI Cライブラリです。このライブラリは以下から 入手可能です。

http://sunsite.unc.edu/boutell/cgic/cgic102.tar.Z
http://www.boutell.com/cgic/cgic102.tar.Z


[Up] [Next] [Previous]