かんたん作成【HTML CSS JavaScript PHP CGI Perl Ruby Python .htaccess】

トラックバック受信

#! /usr/local/bin/perl

use Jcode;

$TIME        = time;
$FILE        = "./dat/traba.dat";        #トラックバック保存先
$FILEMAX    = 50;                #トラックバック保存件数
$TXTMAX        = 300;                #文字数制限(全角)

if($ENV{'REQUEST_METHOD'} eq 'POST') {
    loadTrackback();                            #トラックバック受信
    printResponse(writeData());                        #ファイル書き込み・レスポンス
}
else {
    print qq(Content-type: text/html;charset=Shift_JIS\n\n);
    print <<"    END";
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head><title>トラックバック受信</title></head>
        <body>
        <h1 style="margin:2px;font-size:17px">トラックバック受信</h1>
        トラックバック送信先 http://$ENV{'HTTP_HOST'}$ENV{'SCRIPT_NAME'}<br>
    END
    printData();                                #ファイル読み込み・表示
    print <<"    END";
        </body>
        </html>
    END
}

exit;


#============================================================================== ファイル読み込み・表示
sub    printData
{
    my    ($i);
    open(FILE, "<$FILE") or return;
    eval{ flock(FILE, 1) };
    my    @DATA = <FILE>;
    close FILE;
    for($i = 0 ; $i < @DATA ; $i++) {
        my    ($tm, $name, $title, $url, $excerpt) = split(/\t/, $DATA[$i]);
        my    ($sec, $min, $hour, $date, $mon, $year, $day) = localtime($tm);
        $mon++;
        print << "        END";
            <p style="width:100%;padding:5px;border:1px solid #333">
                【$mon月$date日$hour時$min分】 $name<br>
                <a href="$url">$title</a><br>
                $excerpt<br>
            </p>
        END
    }
}

#============================================================================== ファイル書き込み
sub    writeData
{
    return('Error');    #サンプルにつき受信停止
    if(!$FORM{'blog_name'} or !$FORM{'title'} or !$FORM{'url'} or !$FORM{'excerpt'}) {
        return('Error');
    }
    open(FILE, "<$FILE") or return('Error-Read');
    eval{ flock(FILE, 1) };
    my    @DATA = <FILE>;
    close FILE;
    unshift @DATA, "$TIME\t$FORM{'blog_name'}\t$FORM{'title'}\t$FORM{'url'}\t$FORM{'excerpt'}\t\n";
    while(@DATA > $FILEMAX) {
        pop @DATA;
    }
    open(FILE, ">$FILE") or return('Error-Write');
    eval{ flock(FILE, 2) };
    print FILE @DATA;
    close(FILE);
    return;
}

#============================================================================== レスポンス
sub    printResponse
{
    my    $message = $_[0];
    print qq(Content-Type: text/xml;charset=UTF-8\n\n);
    print qq(<?xml version="1.0" encoding="UTF-8"?>\n);
    print qq(<response>\n);
    if($message){
        print qq(<error>1</error>\n);
        print qq(<message>$message</message>\n);
    }
    else {
        print qq(<error>0</error>\n);
    }
    print qq(</response>\n);
}

#============================================================================== トラックバック受信
sub    loadTrackback
{
    my    ($query, $pair);
    read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
    foreach $pair (split(/&/, $query)) {
        my    ($key, $value) = split(/=/, $pair, 2);
        $value =~ tr/+/ /;
        $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
        $value = Jcode::convert($value, 'sjis');
        $value =~ s/</&lt;/g;
        $value =~ s/>/&gt;/g;
        $value =~ s/\x0D\x0A/ /g;            #改行を半角スペースに変換
        $value =~ s/\x81\x40/ /g;            #全角スペースを半角スペースに変換
        $value =~ s/\s+/ /g;                #連続スペースをスペース1文字に変換
        $FORM{$key} = $value;
        if(length($FORM{$key}) > $TXTMAX * 2) {        #文字数チェック
            $FORM{$key} = substr($FORM{$key}, 0, $TXTMAX * 2);
            $FORM{$key} .= "...";
        }
    }
}
CGI(Perl)
Hello world ! ユーザーエージェント取得・表示($ENV{'HTTP_USER_AGENT'})
IPアドレス取得・表示($ENV{'REMOTE_ADDR'}) リンク元取得・表示($ENV{'HTTP_REFERER'})
URL取得・表示($ENV{'HTTP_HOST'}, $ENV{'REQUEST_URI'}) 環境変数を全て表示(%ENV)
ホスト名取得・表示(gethostbyaddr) 訪問者のプロバイダーを表示
訪問者の都道府県を取得・表示 日付を表示(localtime time)
日付を画像表示(localtime time, substr) アクセス日時を表示(localtime time)
指定の日までの日数を表示 曜日によって背景色を変える
日によって背景色を変える 月によって背景色を変える
見るたびに背景色を変える 見るたびに背景画像を変える
おみくじ(rand, int) カラーチャート
Shift_JIS文字コード表 UTF-8文字コード表
グラフ(横棒グラフ) アクセスカウンター
アクセスカウンター(画像) アクセスカウンター(今日・昨日)
訪問回数(クッキー, $ENV{'HTTP_COOKIE'}, Set-Cookie) アクセスログ保存
アクセスログ集計 パスワード認証
クッションページ($ENV{'QUERY_STRING'}) クッションページ($ENV{'PATH_INFO'})
フォーム入力内容をクッキーに保存 1つのCGIでフレームページを表示
IPアドレスからホスト名を取得(gethostbyaddr) ホスト名からIPアドレスを取得(gethostbyname)
IPアドレスからプロバイダーを取得 IPアドレスから都道府県を取得
文章中の文字列を別の文字列に一括変換 カレンダー
カレンダー(前月・次月へのリンク付) カレンダー(今年1月〜12月)
掲示板 掲示板(URL自動変換/連続改行・スペース削除)
掲示板(年齢・性別・都道府県選択) 画像アップロード掲示板
チャット Web日記
サイトマップ(ディレクトリ内のファイルを調べる) Webデータ取得(HTTPヘッダー, HTMLソース, use Socket)
Webデータ取得(HTTPヘッダー, HTMLソース, use HTTP::Request::Common) トラックバック受信
トラックバック送信 メール送信(メールフォーム, sendmail)
リバーシ(ボードゲーム) .htaccessユーザー認証用ユーザーファイル作成
リダイレクト 条件指定リダイレクト
言語振り分けリダイレクト 条件指定アクセス拒否(ステータスコードを返す)
HTMLファイル読み込み・表示 HTMLファイル読み込み・パスワード認証
HTMLファイル読み込み・条件指定アクセス拒否 HTMLファイル読み込み・条件指定リダイレクト
外部CGIファイル読み込み(require) 画像ファイル読み込み・表示
画像縮小・拡大・サイズ変更(Image::Magick, Resize) 画像切り出し(Image::Magick, Crop)
画像文字埋め込み(Image::Magick, Annotate) 画像合成(Image::Magick, Composite)
画像生成・保存(Image::Magick->new) 画像合成アクセスカウンター
かんたん作成【HTML CSS JavaScript PHP CGI Perl Ruby Python .htaccess】