Perl �� CGI |
| CGI�X�N���v�g�̎d�g�� |
 |
- CGI�́AUNIX��œ��삷�錾��Ȃ牽���g���č쐬���Ă����܂��܂��A
C����ł̓T�[�o��OS���ƂɃR���p�C��(�@�B�ꉻ)����K�v������A
��x�R���p�C�����Ă��܂��ƕύX���邱�Ƃ��ł��܂���B
���̃T�C�g���疳���Ń_�E�����[�h���Ă��������ł͉����ύX�ł��܂���B
C�̃\�[�X�����J������@������܂����A����͂܂����ŁA������xC�̒m�����K�v�Ȃ����łȂ��A
�R���p�C�����K�v�ɂȂ�܂��B �����̖������ׂăJ�o�[���Ă����̂�Perl(�ȉ�Perl�A�p�[���Ɠǂ�)����ł��B
Perl�́A�e�L�X�g�x�[�X�œ��삷��R���p�C������ł��̂ŁA�쐬����̂̓e�L�X�g�t�@�C�������ł��B
���̃e�L�X�g�y�[�W�ɃA�N�Z�X�������Perl�������ŃR���p�C�����Ď��s����܂��B
�������APerl�́AC����̒�����BASIC�̒��������킹����������Ȃ̂ł��B
�����̗��R���猻��CGI�Ƃ��Đ��E���ōł��g�p����Ă���̂�Perl�ł��B
�{�T�C�g�́A���ׂ�Perl�ō쐬����CGI��������Ă��܂��B
����ł́APerl���ꂪ�����ł����CGI�͍쐬�ł��邩�ƌ����A������NO�ł��B
Perl�̓C���^�[�l�b�g�ōł��g�p����Ă���J������ł����A
Perl���̂��̂̓C���^�[�l�b�g�ׂ̈ɊJ�����ꂽ����ł��Ȃ���ACGI�ׂ̈ɊJ�����ꂽ����ł�����܂���B
�{���A���|�[�g���쐬����ׂ̌���Ƃ��ĊJ�����ꂽ�h�L�������g�L�q����ŁA
Perl�����̒m���ł�CGI���J�����鎖���ł��܂���B
�������Ȃ���A�K��Web�T�[�o�ɂ͊��ϐ��Ƃ���CGI�ɂƂ��ēs���̂����㕨�����݂��܂��B
Perl�́A���̊��ϐ��ƌ����g�ݍ��킹�鎖��CGI���������܂��B
|
| ��Ȋ��ϐ� |
 |
- �K��҂Ɋւ�����
REMOTE_HOST |
�K��҂̃z�X�g�����Z�b�g����Ă��܂��B�����Z�b�g����Ă��Ȃ��ꍇ��A
�h�o�A�h���X���Z�b�g����Ă���ꍇ�́A�h���C���ϊ����[�`�����g���ĕϊ��ł��܂��B
|
REMOTE_ADDR |
�K��҂̂h�o�A�h���X���Z�b�g����Ă��܂��B |
REMOTE_USER |
���[�U�[�F�T�[�o�ŁA�ی�f�B���N�g�����Ƀv���O����������ꍇ�A
�F���[�U�����Z�b�g����Ă��܂��B�قƂ�ǂ̃v���o�C�_�ł͉����Z�b�g����Ă��܂���B
|
HTTP_USER_AGENT |
�K��҂̃u���E�U�����Z�b�g����Ă��܂��B |
HTTP_ACCEPT |
�K��҂̃u���E�U���T�|�[�g����l�h�l�d�^�C�v�̃��X�g���Z�b�g����܂��B |
HTTP_REFERER |
�K��҂��������痈�����A�Q�ƌ��̊��S�ȃA�h���X���Z�b�g����Ă��܂��B
�i�u�b�N�}�[�N��A���ڃA�h���X�����͂��ꂽ�ꍇ�͉����Z�b�g����Ȃ��j
���݂ł̓v���C�o�V�[�ی�ׁ̈A�قƂ�ǎ擾�ł��Ȃ��B
|
|
- �T�[�o�Ɋւ�����
SERVER_NAME |
�T�[�o�̃h���C�������A�T�[�o�̂h�o�A�h���X���Z�b�g����Ă��܂��B |
SERVER_ADMIN |
�T�[�o�Ǘ��҂̃��[���A�h���X���Z�b�g����Ă��܂��B
�i��ϖZ�������X�ł��B�ނ�݂Ƀ��[�����o���͍̂T���܂��傤�B�j
|
SERVER_SOFTWARE |
�v�����T�[�o�̃\�t�g�E�F�A�̖��O�ƁA�o�[�W�������Z�b�g����܂��B |
GATEWAY_INTERFACE |
�T�[�o��Ŏ��s����Ă���b�f�h�̃o�[�W�������Z�b�g����܂��B |
DOCUMENT_ROOT |
�T�[�o�̃h�L�������g���[�g�f�B���N�g���̃p�X���Z�b�g����܂��B |
SERVER_PROTOCOL |
�T�[�o�ւ̃A�N�Z�X�Ɏg�p���ꂽ�v���g�R���̖��O�ƃo�[�W�������Z�b�g����܂��B |
SCRIPT_NAME |
���ݎ��s����Ă���X�N���v�g�̑��p�X���Z�b�g����Ă��܂��B |
|
- �t�H�[���ƃN�b�L�[�Ɋւ�����
REQUEST_METHOD |
<form>�^�O��method�A�g���r���[�g���Ԃ���܂��B'GET' / 'POST' |
CONTENT_LENGTH |
POST�N�G���[�ɂ�著���Ă������������o�C�g�P�ʂŊi�[����Ă��܂��B |
QUERY_STRING |
GET�N�G���[�ɂ�著���Ă����t�H�[������̃f�[�^���i�[����Ă��܂��B |
HTTP_COOKIE |
�K��҂̃u���E�U�ɃZ�b�g����A �T�[�o����A�N�Z�X�ł���COOKIE�̒l���Z�b�g����Ă��܂��B |
|
���ϐ���$ENV{'���ϐ���'}�ŊȒP�Ɏ擾�ł��܂��B
���Ƃ��A�K��҂��g�p���Ă���u���E�U��m��ɂ�$ENV{'HTTP_USER_AGENT'}�ׂ܂��B
|
| �����ݒ� |
 |
- perl�X�N���v�g�̍ŏ��̍s�ɂ́A
#!usr/local/bin/perl
�̂悤��perl�����݂���p�X�������K�v������܂��B
�P�s�ڂ��s�ł��A�擪�ɃX�y�[�X�������Ă��G���[�ɂȂ�܂��B
������UNIX�T�[�o�ł́A#!usr/local/bin/perl�ɒu����A�ߔN�悭�g�p�����悤�ɂȂ���Linux�ł́A
#!usr/bin/perl�ɐݒ肳��Ă��܂��B
Windows�̃��[�J���T�[�o�ł͕K�v�Ȃ���������܂��̂ŁA
���[�J���Ŗ��Ȃ����삵�Ă���b�f�h���T�[�o�ɃA�b�v����ƃG���[�ɂȂ�ꍇ�̂قƂ�ǂ��A
����perl�̃p�X�Ɍ���������܂��B
(Windows�ł�Web�T�[�o��Apachi���g�p���Ă���ꍇ�͕K�v)
|
| ������ |
 |
- �O�q�̂Ƃ���perl�̐擪�s�ɂ�perl�̃p�X���L�q����K�v������܂��B
�Q�s�ڈȍ~�A���C�����[�`���܂ł̑O���ɂ͑}�����郉�C�u�����A
���ϐ����܂߂��������ݒ肷��ϐ���������(�l�̑��)����R�[�h��u���̂���ʓI�ł��B
#���{��R�[�h�ϊ����W���[��
require 'jcode.pl';
����́A���������{��R�[�h�ɕϊ����郉�C�u������ǂݍ���ł��܂��B
- ���t�̐ݒ�
���E���̃T�[�o�����R�ɑ���ł��鎖�A���ꂪ�C���^�[�l�b�g�̍ő�̓����ł��B
���{��̃y�[�W�ł��O���̃T�[�o�ɒu����Ă���T�C�g����ϑ����̂ł��B
�����Ŗ��ɂȂ�̂������ł��Bperl�ɂ͊��ϐ��𑀍삵�Ď������C�����邱�Ƃ��ł��܂��B
$ENV{'TZ'} = "JST-9";
$DATE = time;
����́A���ϐ�$ENV{'TZ'}���ەW�����ԂɂX���ԃv���X���ē��{���Ԃɂ��ăV���A���l���擾���Ă��܂��B
�������Ȃ���T�[�o�̒��ɂ�$ENV{'TZ'}���ϐ����@�\���Ȃ����̂�����܂��B
���̂悤�ȏꍇ��z�肵�Ă��ׂĂ̎����𐢊E�W������Z�o���Ă����Ζ��Ȃ����삳���邱�Ƃ��ł��܂��B
$timelag = 9;
$ENV{'TZ'} = "GMT";
$DATE = time + $timelag * 3600;
|
| �N�b�L�[ |
 |
- �ʏ��CGI�ł̓f�[�^���T�[�o�ɕۑ����܂����A�����̏��͂��ׂĂ̖K��҂ɋ��ʂɎg�p����A
�K��҂��ƂɋL������邱�Ƃ͂���܂���B
���Ƃ��ĖK��҂��Ƃɕۑ����Ă���������������܂��B
���Ƃ��A�C���^�[�l�b�g�𗘗p�����ʐM�̔��ł͖K��҂��Ƃɍw�����悤�Ƃ��鏤�i���قȂ�܂��B
�������f�[�^�t�@�C���ɕۑ����邱�Ƃ͂ł��܂���B���̂悤�Ȍl�����ꎞ�I�ɋL��������@�\���N�b�L�[�ł��B
�N�b�L�[�͖K��҂̏����T�[�o���K��҂̃u���E�U�ɏ������ގ��Ŏ������Ă��܂��B
- �N�b�L�[�̏���
�N�b�L�[�Ƀf�[�^��ۑ�����ɂ́uSet-Cookie�v�w�b�_�[���g�p���܂��B
Print "Set-Cookie:�N�b�L�[�̖��� = �ۑ�����f�[�^ ; expires = �ۑ����� \n";
- �N�b�L�[�̖���
���͉̂p�����Ŏ��R�ɕt���邱�Ƃ��ł��܂��B����CGI�X�N���v�g�Əd�����Ȃ����Ƃ����ɂ͋C������K�v������܂��B
- �ۑ�����f�[�^
�ۑ�����f�[�^���v���O���}�����R�ɍ쐬�ł��܂��B�M�҂̏ꍇ�͕������₷���悤��
Key!�l, Key!�l, Key!�l, Key!�l, Key!�l
�Ƃ��������ŋL�^���Ă��܂��B
���ꂼ��̍��ڂ�","�ŋ��A�L�[�ƒl�͒ʏ킠�܂�g�p���Ȃ�"!"�ŋ���Ă��܂��B
�y��z
name!Terra,email!terra@xx.xxxx.or.jp,hp!http://www.xxxx.or.jp/terra/
|
|
- �ۑ�����
�N�b�L�[�ɂ͕ۑ����Ă���������ݒ肷��K�v������A�����ɂ������ȋK��������܂��B
"�j��, ��-��-���� ��:��:�b GMT";
�j���́A'Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'����I��
���́A�O���ȗ�������'01','02','03'�̂悤�Ɍ����܂��B
���́A�P������'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' �ɒu��������K�v������܂��B
�����b���O���ȗ����邱�Ƃ͂ł��܂���B���̃T���v���ł͂R�O���Ԃ̊������w�肵�A������ݒ肵�Ă��܂��B
local(@date) = localtime(time + 30 * 86400);
$date[5] += 1900;
$date[3] = sprintf("%02d",$date[3]);
$date[2] = sprintf("%02d",$date[2]);
$date[1] = sprintf("%02d",$date[1]);
$date[0] = sprintf("%02d",$date[0]);
local($wday) = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$date[6]];
local($month) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [$date[4]];
local($date_gmt) = "$wday, $date[3]\-$month\-$date[5] $date[2]:$date[1]:$date[0] GMT";
local($cookievalue) = join(",","name!$QUERY{'name'}","email!$QUERY{'email'}","pw!$QUERY{'pw'}");
print "Set-Cookie: $CookieName=$cookievalue; expires=$date_gmt\n";
|
|
- �ėp�I�ȏ������݁A�ǂݍ��݃��[�`��
�ėp�I�ɗ��p�ł���T�u���[�`���ɂ��Ă����A������邾���ŁA�b�f�h���쐬���邽�тɏ���������K�v���Ȃ��Ȃ�܂��B
#�N�b�L�[��������
sub cookie_regist {
my($cookiename, $cookielist, $date) = @_;
!$date && ($date = 30);
my(@COOKIELIST) = split(/\,/, $cookielist);
my(%COOK);
my(@DATE) = localtime(time + $date * 86400);
$DATE[5] += 1900;
$DATE[3] = sprintf("%02d",$DATE[3]);
$DATE[2] = sprintf("%02d",$DATE[2]);
$DATE[1] = sprintf("%02d",$DATE[1]);
$DATE[0] = sprintf("%02d",$DATE[0]);
my($wday) = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$DATE[6]];
my($month) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [$DATE[4]];
my($date_gmt) = "$wday, $DATE[3]\-$month\-$DATE[5] $DATE[2]:$DATE[1]:$DATE[0] GMT";
my($cookievalue, $key, $value);
foreach (@COOKIELIST) {
($key, $value) = split(/=/, $_);
$key =~ s/\,/&comma/g;
$key =~ s/:/&colon/g;
$key =~ s/;/&semicolon/g;
$value =~ s/\,/&comma/g;
$value =~ s/:/&colon/g;
$value =~ s/;/&semicolon/g;
if ($cookievalue) {
$cookievalue .= ",$key:$value";
} else {
$cookievalue = "$key:$value";
}
$COOK{$key} = $value;
}
print "Set-Cookie: $cookiename=$cookievalue; expires=$date_gmt\n";
%COOK;
}
#�N�b�L�[�ǂݍ���
sub cookie_read {
my($cookiename) = @_;
my($key, $value, %COOK);
my($cookies) = $ENV{'HTTP_COOKIE'};
my(@pairs) = split(/;/,$cookies);
my(@DUMMY);
foreach $pair (@pairs) {
($key, $value) = split(/=/, $pair);
$key =~ s/ //g;
$DUMMY{$key} = $value;
}
@pairs = split(/\,/,$DUMMY{$cookiename});
foreach $pair (@pairs) {
($key, $value) = split(/:/, $pair);
$key =~ s/&comma/\,/g;
$key =~ s/&colon/\:/g;
$key =~ s/&semicolon/\;/g;
$value =~ s/&comma/\,/g;
$value =~ s/&colon/\:/g;
$value =~ s/&semicolon/\;/g;
$COOK{$key} = $value;
}
%COOK;
}
|
|
- �K��̋L�^
�����̃z�[���y�[�W�ւ̃A�N�Z�X����m���\�I�Ȃ��̂ɃA�N�Z�X�J�E���^�[������܂��B
���̃A�N�Z�X�J�E���^�[�́A���ׂĂ̖K��҂̗v�𐔂��Ă��܂��̂ŁA
�ǂȂ�������K�ꂽ�̂��͔c���ł��܂���B�N�b�L�[�𗘗p���āA
���ꂼ��̖K��҂̃u���E�U�ɃJ�E���g���L�^���Ă����A�K��҂��ƂɃJ�E���g���鎖���\�ɂȂ�܂��B
$timelag = 9;
$ENV{'TZ'} = "GMT";
#$timelag�ɐݒ肵�����E�W��������̎������v���X���Ė{���̓��t���擾
(@DATE) = localtime(time + $timelag * 3600);
$date = sprintf("%04d/%02d/%02d", $DATE[5] + 1900, $DATE[4]++, $DATE[3]);
#�N�b�L�[�̖��O���w�肵�ăN�b�L�[��ǂݍ���;
&cookie_read('cookie_count');
#���t�ׂē������Ȃ�1�v���X����
#���߂Ă̖K���A���t���ς���Ă���Ζ{�������P�ɂ���
if ($COOKIE{'date'} eq $date) { $COOKIE{'today'}++; } else { $COOKIE{'today'} = 1; }
$COOKIE{'total'}++;
#�N�b�L�[�ɏ������ރf�[�^�̃t�H�[�}�b�g�𐮂���
$value = "date!$date,today!$COOKIE{'today'},total!$COOKIE{'total'}";
#�N�b�L�[�̖��́A�������ރf�[�^�A�������w�肵�ď������݃��[�`�����Ăяo��
&cookie_regist('cookie_count', $value, 30);
print "Content-type: text/html\n\n";
print "<html><body>\n";
print "<p>�{��$COOKIE{'today'}��A���v$COOKIE{'total'}��ڂ̂��K�₠�肪�Ƃ��������܂��B</p>\n";
print "</body></html>\n";
exit;
|
|
- �t�H�[���̓��͎x��
�f����`���b�g�ȂǁA�悭���p����y�[�W�ŁA���O��[���A�h���X��L������͖̂��Ȃ��̂ł��B
�N�b�L�[���g�p����Q��ڈȍ~�́A�\�ߓ��͂���Ă��ĖK��҂͏ȗ����邱�Ƃ��ł��܂��B
�N�b�L�[�ɏ������ރR�[�h�́A�f�[�^���t�@�C���ɏ���������ɒu���܂��B
#�N�b�L�[�ɏ������ރf�[�^�̃t�H�[�}�b�g�𐮂���
#�L��������̂́A�����O�AE-Mail�A�z�[���y�[�W�A�p�X���[�h
$value = "name!$QUERY{'name'},email!$QUERY{'email'},hp!$QUERY{'hp'},pw!$QUERY{'pw'}";
#�N�b�L�[�̖��O���ubbs�v�A�ۑ����Ԃ��R�O���ɂ��A�N�b�L�[�������݃��[�`�����Ăяo��
&cookie_regist('bbs', $value, 30);
�������܂ꂽ�N�b�L�[�̏����t�H�[�����쐬����Ƃ��ɓW�J���܂��B
#�N�b�L�[�̖��̂Ɂubbs�v���w�肵�ăN�b�L�[��ǂݍ���
&cookie_read('bbs');
print "<form name=inputform action=note.cgi method=POST>\n";
print "<input type=hidden name=action value=regist>\n";
#�A�z�z��%COOKIE�̒l���v�����v�g�Ƃ��đ��
print "�����O:<input type=text name=name value=$COOKIE{'name'}><br>\n";
print "E-mail:<input type=text name=email value=$COOKIE{'email'}><br>\n";
print "�薼:<input type=text name=subject><br>\n";
print "Hp:<input type=text name=hp value=$COOKIE{'hp'}><br>\n";
print "Password:<input type=password name=pw value=$COOKIE{'pw'}><br>\n";
print "<textarea name=comment rows=4 cols=80></textarea><br>\n";
print "<input type=submit value=�V�K���e�^�X�V>\n";
print "</form>\n";
|
| ���ƃT�u���[�`�� |
 |
- perl�ł͊��ƃT�u���[�`������ʂ��܂���B��{�I�ɂ��ׂĂ����ł��B
��ʓI�ɂ͏����������L�q���A�߂�l���A���Ȃ����̂��T�u���[�`���A������̌��ʂ��A�����̂����ƌĂт܂����A
perl�ł͂��ׂẴT�u���[�`���ōŌ�ɏ������ꂽ�ϐ����A���܂��B
���̋A���ꂽ�l���g�p��������Ȃ����v���O���}����ł��B
�g�p����Ί��Ŏg�p���Ȃ���T�u���[�`���Ƃ������ƂɂȂ�܂��B
- ���̋L�q
���̐錾�ɂ�sub�L�[���[�h�Ŏn�܂�u���b�N�ŋL�q���܂��B
Sub function {
local($a) = 2;
local($b) = 3;
local($c) = $a * $b;
$c;
}
|
|
function�͉p�����Ńv���O���}�����R�ɕt���邱�Ƃ��ł��܂��B
�����ł�local�L�[���[�h���g�p���Ċ��������̃X�R�[�v(�L���͈�)�������[�J���ϐ����g�p�ł��܂��B
���[�J���ϐ��́A���̃u���b�N�������ŗL���ł�����
���C�����[�`���œ����̕ϐ������g�p����Ă��Ă��l�ɉe����^����S�z������܂���B
���������Ĕėp�I�Ȋ����L�q���鎖���\�ɂȂ�̂ł��B
- ���̌ďo��
����A�T�u���[�`�����Ăяo���ꍇ�́A�����̑O�Ɂu&�v��t���܂��B
�T�u���[�`���̏ꍇ�͖߂�l��K�v�Ƃ��܂���B���̂悤�ȋL�q�����Ő�����T�u���[�`���Ɉڂ����Ƃ��ł��܂�
&function;
���͖߂�l�����܂��̂Ŏ��̂悤�ɂ��܂��B
$value = &function;
���̏ꍇ�A�߂�l��$value�Ɋi�[����܂��B
�v�Z���Ɋ܂߂�
$value = &function * 2;
print "<p>���v = ", &function , "</p>\n";
for ($index = &start_roop; $index <= &end_roop; $index++) {
�E�E�E�E�E�E�E
}
|
|
�Ə������Ƃ��ł��܂��B
���́A�����ő��̊����Ăяo�������A�������g���Ăяo�����Ƃ��ł��܂��B
- ������n��
���A�T�u���[�`���Ɉ�����n���A���̈����𗘗p���Čv�Z�����邱�Ƃ��ł��܂��B
�T�u���[�`���Ɉ�����n���A������ڂ��ɂ́A
&function(3);
���Ɉ�����n���A�v�Z���ʂ����ɂ́A
$value = &function(3);
�Ƃ��܂��B
�������A�X�J���ϐ������łȂ��z��ϐ���n�����Ƃ��ł��܂��B
$value = &fuction(@DATA);
- ���������������
����A�T�u���[�`���͈��������v�Z�A�������邱�Ƃ��ł��܂��B
�Ăяo�����Ɏw�肳�ꂽ�����́A����ϐ�@_�Ɋi�[����Ă��܂��B
sub function {
local($pi) = $_[0];
$pi * 3.14159;
}
|
|
���̗�ł͈����ɉ~�������|���ċA���Ă��܂��B
�����̃X�J���l����������ɂ́A
sub function {
local($a, $b) = @_;
$a * $b;
}
|
|
���̗�́A�Q�̈��������A���̐ς��A���Ă��܂��B
�z������ɂ́A���̂悤�ɏ����܂��B
sub function {
local(@PRM) = @_;
local($max) = 0;
foreach (@PRM) {
($_ > $max) && $max = $_;
}
$max;
}
|
|
����́A������z��ϐ��̐��l���P�����ׁA�ő�l���A���Ă��܂��B
���̃T���v���ł́A�f�B���N�g���Ȃ��̃T�u�f�B���N�g����A�t�@�C�����A�t�@�C���̃T�C�Y��\�����Ă��܂��B
�f�B���N�g���̏ꍇ�́A�������g���Ăяo�����̓������\�����܂��B
sub search {
local($dir) = $_[0];
#�f�B���N�g�����w�肳��Ă��Ȃ���Ό��݂̃f�B���N�g������J�n
if (!$dir) { $dir = './'; }
#�f�B���N�g�����ړ�
chdir $dir;
#�T�u�f�B���N�g�����܂߃f�B���N�g���Ȃ��̃t�@�C�����擾
local(@FILENAMES) = <*>;
foreach $file (@FILENAMES) {
#�t�@�C�����ǂݍ��݉\�ȃf�B���N�g���Ȃ�
if (-d $file && -r _) {
#�f�B���N�g������\��
print " <b>[$file]</b>\n";
print "<ul>";
#���̃f�B���N�g���̓����ׂ邽�ߎ������g���Ăяo��
&search($file);
#���̃f�B���N�g���ɖ߂�
chdir("../");
print "</ul>";
} else {
#�t�@�C�������ʂ̃t�@�C���Ȃ�
if (-f $file) {
#�t�@�C���̃T�C�Y�ׂ�
$size = int((-s $file) / 1024 + 0.9);
print "$file - $size K<br>\n";
}
}
}
}
|
|
|
|
|