|
|
03/16(Sun) 02:26
■ CGI Tips 集
このページは私が今までに設置したCGIで適用した、あると便利なちょっとした機能追加の方法をTips集として汎用的に使えるようまとめたものです。あなたのCGIの改造にお役に立てれば幸いです。
各スクリプトはマウスでドラッグして「コピー」し、エディタに「貼りつけ」るとコピーできます。
■ アクセス時刻の表示
表示形式は 9月23日(土)07時56分 です。
# 時刻表示
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time + 9*3600);
@week = ('日','月','火','水','木','金','土');
$date_now = sprintf("%01d月%01d日(%s)%02d時%02d分",$mon +1,$mday,$week[$wday],$hour,$min);
# 表示したい場所に以下を記述
print " $date_now \n";
|
■ 過去の日付情報の取得
<FORM METHOD="GET" ACTION="このxxxx.cgi">
<INPUT SIZE=2 TYPE="text" NAME="date">に n日前のデータが入力されるとします。
日付形式は 9/23(土)07:56 です。あなたの欲しい形式に変更して下さい。
# 環境変数取得
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$FORM{$name} = $value;
}
# n日前の日付情報の取得
($sec,$min,$hour,$mday,$mon,$year,$wday,$suu) = gmtime(time + 9*3600-$FORM{'date'}*60*60*24);
@week = ('日','月','火','水','木','金','土');
$date_old = sprintf("%01d/%01d(%s)%02d:%02d",$mon +1,$mday,$week[$wday],$hour,$min);
|
■ ファイルの最終更新時刻の取得
ファイルのサイズや作成日付などのステータス情報を調べる stat命令を使います。
最終更新時刻は$FILESTAT[9]で得られます。ちなみに、サイズは$FILESTAT[7]、作成日付は$FILESTAT[10]です。
日付形式は 98/09/23 です。あなたの欲しい形式に変更して下さい。
# ファイル xxx.html のステータス情報の取得
# 最終更新時刻は$FILESTAT[9]で得られる
@FILESTAT = stat('xxx.html');
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime($FILESTAT[9] + 9*3600);
$up_date = sprintf("%02d/%02d/%02d",$year + 1900,$mon + 1,$mday);
|
■ メールのフォーマットチェック
$email =~ /(.*)\@(.*)\.(.*)/)でメールアドレスの形式が aaa@bbb.ccc であるかをチェックします。
# 訪問者の名前($name)やメールアドレス($email)が無い
# 場合は入力エラーにする
if ($name eq "" || $email eq "" || !($email =~ /(.*)\@(.*)\.(.*)/) ) {
print &print_sjis(<入力エラー
入力ミス
EOF
if ($name eq "") {print "お名前を入力して下さい。 \n";}
if ($email eq "") {print "メールアドレスを入力して下さい。 \n";}
if ($email ne "" && !($email =~ /(.*)\@(.*)\.(.*)/))
{print "メールアドレスが正しく記入されていません。 \n";}
print &print_sjis(<ブラウザの「戻る」ボタンで戻り確認してください。
EOF
exit;
}
|
■ IPアドレスによる投稿排除
投稿排除するIPアドレスリストで指定された(123.456.789.0、123.456.789.1)からの投稿を排除します。
この指定は前方一致です。例えば@deniedaddrs = ('123.456.789.0','124.356');と設定することにより,123.456.789.0及び124.356.*.*からの投稿を排除することができます。(*は任意の数字に一致する)
# 投稿排除判別
@deniedaddrs = ('123.456.789.0','123.456.789.1');# 投稿排除するIPアドレスリスト
$addr = $ENV{'REMOTE_ADDR'};
foreach(@deniedaddrs){
if($addr =~ /^$_/ && length($_) > 4){
print "あなたのアドレス $addr は投稿制限の対象となっています。 ";
print "投稿したい場合は管理人に連絡してください。\n";
exit;
}
}
|
■ サーバエラーのメッセージ表示
Internal Server Error といわれても何がなんだかわかりません。
このエラーが出たときは、perlのパス指定の次の行(2行目以降)に次のものを加えるとエラー情報の詳細を表示することができます。
#!/usr/bin/perl
# エラー情報の詳細表示
BEGIN{
$| = 1;
print "Content-type: text/html\n\n";
open(STDERR, ">&STDOUT");
}
|
|
|