连词成句me the it two up yardthip took hours clean to

#!/usr/bin/perl
#┌─────────────────────────────────
#│ CLIP BOARD v1.6 ()
#│ Copyright(C) Kent Web 2002
#│ webmaster@
#│ http://www./
#└─────────────────────────────────
$ver = 'ClipBoard v1.6';
#┌─────────────────────────────────
#│ [注意事項]
#│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した
いかなる損害に対して作者は一切の責任を負いません。
#│ 2. 設置に関する質問はサポート掲示板にお願いいたします。
直接メールによる質問は一切お受けいたしておりません。
#│ 3. このスクリプトは、method=POST 専用です。
#│ 4. 同梱のアイコンは再配布で著作権者は以下のとおりです。
home.gif : mayuRinさん
clip.gif : 牛飼いとアイコンの部屋さん
#└─────────────────────────────────
# [ 設置構成例 ] : かっこ内はパーミッション値
public_html / index.html (ホームページなど)
+-- clip / clip.cgi
cgi-lib.pl [644]
+-- img [777] / clip.gif
+-- lock [777] /
#============#
#============#
# ライブラリ取り込み
require './jcode.pl';
require './cgi-lib.pl';
# タイトル名
$title = "プログラムアップ板";
# タイトル文字の色
$t_color = "#800000";
# タイトル文字のタイプ
$t_face = "MS Pゴシック";
# タイトル文字サイズ(スタイルシートで有効)
$t_point = '20pt';
# 本文文字サイズ(スタイルシートで有効)
$b_size = '10pt';
# 記事題名の色
$sub_color = "green";
# スクリプト名
# → 絶対パスなら http:// からのURLパス
$script = './clip.cgi';
# ログファイル名
# → 絶対パスなら / から始まるパス(http://からではないので注意)
$logfile = './clip.log';
# 管理用パスワード
$pass = '';
# 最大記事数(これを超える記事は古い順に削除されます)
$max = 1000;
$home = "../index.html";
# bodyタグ
$body = '';
# URLの自動リンク (0=no 1=yes)
# → タグ許可の場合は no とすること。
$autolink = 1;
# 1ページあたりの記事表示件数
$p_log = 10;
# ロックファイル機構 (0=no 1=symlink関数 2=mkdir関数)
$lockkey = 0;
# ロックファイル名
# → 絶対パスなら / から始まるパス(http://からではないので注意)
$lockfile = './lock/clip.lock';
# アップロードディレクトリ
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$ImgDir = "./img/";
# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "/6/img/";
# 画像管理者チェック機能 (0=no 1=yes)
0 : アップロード「画像」は管理者がチェックしないと表示されない機能です
1 : チェックされるまで「画像」は「COMMING SOON」のアイコンが表示されます
$ImageCheck = 1;
# 画像と記事の位置
1 : 画像が左。記事は右から回り込む
2 : 画像が上。記事は画像の下から表示。
$imgpoint = 1;
# 投稿処理の権限
0 : 誰でも投稿可能
1 : 管理者のみが投稿
$PostMode = 0;
# 添付ファイルのアップロードに失敗したとき
0 : 添付ファイルは無視し、記事は受理する
1 : エラー表示して処理を中断する
$clip_err = 1;
# メール通知機能
1 : yes:自分の投稿記事もメール通知する
2 : yes:自分の投稿記事はメール通知しない
$mailing = 1;
# sendmailのパス(メール通知する場合)
$sendmail = '/usr/sbin/sendmail';
# メール通知先アドレス(メール通知する場合)
$mailto = '';
# タグ広告挿入オプション (FreeWebなど)
の代わりに「広告タグ」を挿入する。
# → 広告タグ以外に、MIDIタグ や LimeCounter等のタグにも使用可能です。
$banner1 = '';
# 表示部上部に挿入
$banner2 = '';
# 表示部下部に挿入
# アクセス制限(半角スペースで区切る)
→ 拒否するホスト名又はIPアドレスを記述(アスタリスク可)
→ 記述例 $deny = '*. *.denyhost.xx.jp 211.154.120.*';
$deny = '';
# リンク元チェック (0=no 1=yes)
# → いたずら投稿防止に「リンク元」チェックを行う場合
$LinkCheck = 0;
# 同一ホストからの連続投稿を制限
# → 秒数を記述するとその時間以上を経過しないと連続投稿できない
# → 投稿を管理者限定にする場合 ($PostMode=1;) はこの設定は無視されます
$w_regist = 300;
# タイトル画像を使う場合 (http://から画像を指定)
$ImgT = "";
# タイトル画像を使う場合に「横幅」「縦幅」をそれぞれピクセル数で記述
$ImgW = 300;
$ImgH = 70;
# アップロードを許可するファイル形式
= 0; # GIFファイル
= 0; # JPEGファイル
= 0; # PNGファイル
= 1; # TEXTファイル
= 1; # LHAファイル
= 1; # ZIPファイル
= 0; # PDFファイル
= 0; # MIDIファイル
= 0; # WORDファイル
$excel = 0; # EXCELファイル
= 0; # POWERPOINTファイル
= 0; # RAMファイル
= 0; # RMファイル
= 0; # MPEGファイル
= 0; # MP3ファイル
# 投稿受理最大サイズ (bytes)
# → 例 : 102400 = 100KB
$cgi_lib'maxdata = 1024000;
# 画像ファイルの最大表示の大きさ(単位:ピクセル)
# → これを超える画像は縮小表示します
$MaxW = 550; # 横幅
$MaxH = 200; # 縦幅
# アイコン画像ファイル名 (ファイル名のみ)
$IconHome = "home.gif";
$IconClip = "clip.gif";
# クリップ
$IconSoon = "soon.gif";
# COMINIG SOON
# サブメッセージ
# → タイトルの下にサブメッセージを記述できます
# → HTMLタグなどを使ってご自由にどうぞ
$SubMsg = <<'_SUB_MSG_';
#============#
#============#
if ($ImgDir !? /?/$/) { $ImgDir .= "/"; }
if ($ImgUrl !? /?/$/) { $ImgUrl .= "/"; }
if ($mode eq 'regist') { & }
elsif ($mode eq 'find') { & }
elsif ($mode eq 'admin') { & }
elsif ($mode eq 'usrdel') { & }
elsif ($mode eq 'note') { & }
elsif ($mode eq 'check') { & }
#----------------#
アクセス制限
#----------------#
sub axs_check {
# ホスト名を取得
local($flag)=0;
foreach (split(/?s+/, $deny)) {
s/?*/?.?*/g;
if ($host =? /$_/i) { $flag=1; }
if ($flag) { &error("アクセスを許可されていません"); }
#----------------#
記事表示処理
#----------------#
sub html {
# レス処理
if ($mode eq 'resmsg') {
open(IN,"$logfile") || &error("Open Error : $logfile");
while () {
($no,$date,$name,$mail,$sub,$com,$url) = split(//);
if ($in{'no'} == $no) { $flag=1; }
close(IN);
if ($flag == 0) { &error("該当記事が見つかりません"); }
=? s/^Re://g;
$r_sub = "Re:[$no] $sub";
$r_com = "& $com";
$r_com =? s//?r& /
$r_com =? s/]
# 投稿フォーム
if (!$PostMode) { & }
print "?n";
open(IN,"$logfile") || &error("Open Error : $logfile");
while () {
$page + $p_log) { }
($no,$date,$name,$mail,$sub,$com,$url,$host,$pw,$tail,$w,$h,$time2,$chk) = split(//);
if ($mail) { $name = ""; }
if ($url) { $url = ""; }
print "[$no] $sub ";
print "投稿者:$name 投稿日:$date ";
# 返信のリンク
if (!$PostMode) {
print "[] ";
print "& $url?n?n";
if ($imgpoint == 1) { $ipt="align=left hspace=18"; }
print "$com";
# 添付ファイルが存在する場合
if (-e "$ImgDir$no$tail") {
if ($tail eq ".gif" || $tail eq ".jpg" || $tail eq ".png") {
if ($ImageCheck && $chk != 1) {
print "?n";
if ($w && $h) { $wh="width=$w height=$h"; }
else { $wh=""; }
print "?n";
print " $no$tail?n";
print "$com" if ($imgpoint == 1);
print "?n";
close(IN);
print "?n";
$next = $page + $p_
$back = $page - $p_
print "?n";
if ($back >= 0) {
print "?n";
print "?n";
print "?n";
if ($next < $i) {
print "?n";
print "?n";
print "?n";
print "?n";
# 削除フォーム
if (!$PostMode) {
print "?n";
print "?n";
print "?n";
print "記事No?n";
print "削除キー?n";
print "?n";
print "?n";
# 著作権表示(削除?改変は禁止)
print "$banner2?n";
print "?n?n?n";
#----------------#
書きこみ処理
#----------------#
sub regist {
# POSTチェック
if (!&MethPost()) { &error("METHOD形式が POST でありません"); }
# パスワードチェック
if ($PostMode && $in{'pass'} ne $pass) { &error("パスワードが認証できません"); }
# リンク元チェック
if ($LinkCheck) {
$FullUrl = &MyFullUrl();
$ref = $ENV{'HTTP_REFERER'};
$ref =? s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/
if ($ref !? /$FullUrl/i)
{ &error("リンク元が不正のため投稿が受理できません"); }
# フォーム内容をチェック
if ($in{'name'} eq "") { &error("名前が入力されていません"); }
if ($in{'comment'} eq "") { &error("コメントが入力されていません"); }
# ロック処理
if ($lockkey) { & }
open(IN,"$logfile") || &error("Open Error : $logfile");
@lines = ;
close(IN);
@f = split(//, $lines[0]);
if ($in{'name'} eq $f[2] && $in{'comment'} eq $f[5]) { &error("二重投稿は禁止です"); }
if (!$PostMode && $w_regist && time - $f[12] < $w_regist)
{ &error("連続投稿はもうしばらく時間を置いてからお願い致します"); }
# 記事Noを採番
$no = $f[0] + 1;
# 削除キーを暗号化
if ($in{'pwd'} ne "") { $PW = &encrypt($in{'pwd'}); }
# URL自動リンク
if ($autolink) { &auto_link($in{'comment'}); }
# 最大記事数処理
while ($max <= @lines) {
$del = pop(@lines);
local($no,$date,$name,$mail,$sub,$com,$url,$host,$pw,$tail)
= split(//, $del);
if (-e "$ImgDir$no$tail") { unlink("$ImgDir$no$tail"); }
# ファイル添付処理
if ($in{'upfile'}) { &UpF }
unshift(@lines,"$no$date$in{'name'}$in{'email'}$in{'sub'}$in{'comment'}$in{'url'}$host$PW$tail$W$H$times?n");
open(OUT,">$logfile") || &error("Write Error : $logfile");
print OUT @
close(OUT);
# ロック解除
if ($lockkey) { & }
# クッキー格納処理
if ($in{'cook'} eq 'on') { &set_ }
# メール通知処理
if ($mailing == 1) { &mail_ }
elsif ($mailing == 2 && $in{'email'} ne $mailto) { &mail_ }
# 完了画面
print "?n";
print "記事は正常に登録できました?n";
print "?n?n";
print "?n";
if ($PostMode && $in{'action'} eq "regist") {
print "?n";
print "?n";
print "?n";
print "?n";
print "?n";
print "?n?n?n";
#--------------------#
画像アップロード
#--------------------#
sub UpFile {
# 画像処理
$macbin=0;
foreach (@in) {
if ($_ =? /(.*)Content-type:(.*)/i) { $tail=$2; }
if ($_ =? /(.*)filename=(.*)/i) { $fname=$2; }
if ($_ =? /application?/x-macbinary/i) { $macbin=1; }
$tail =? s/?r//g;
$tail =? s/?n//g;
# $fname =? s/?"//g;
$fname =? tr/?"?x0D?x0A//d;
# ファイル形式を認識
if ($tail =? /image?/gif/i && $gif) { $tail=".gif"; $flag=1; }
if ($tail =? /image?/jpeg/i && $jpeg) { $tail=".jpg"; $flag=1; }
if ($tail =? /image?/x-png/i && $png) { $tail=".png"; $flag=1; }
if ($tail =? /text?/plain/i && $text) { $tail=".txt"; $flag=1; }
if ($tail =? /lha/i && $lha) { $tail=".lzh"; $flag=1; }
if ($tail =? /zip/i && $zip) { $tail=".zip"; $flag=1; }
if ($tail =? /pdf/i && $pdf) { $tail=".pdf"; $flag=1; }
if ($tail =? /audio?/.*mid/i && $midi) { $tail=".mid"; $flag=1; }
if ($tail =? /msword/i && $word) { $tail=".doc"; $flag=1; }
if ($tail =? /ms-excel/i && $excel) { $tail=".xls"; $flag=1; }
if ($tail =? /ms-powerpoint/i && $ppt) { $tail=".ppt"; $flag=1; }
if ($tail =? /audio?/.*realaudio/i && $ram) { $tail=".ram"; $flag=1; }
if ($tail =? /application?/.*realmedia/i && $rm) { $tail=".rm"; $flag=1; }
if ($tail =? /video?/.*mpeg/i && $mpeg) { $tail=".mpg"; $flag=1; }
if ($tail =? /audio?/.*mpeg/i && $mp3) { $tail=".mp3"; $flag=1; }
if (!$flag) {
if ($fname =? /?.gif$/i && $gif) { $tail=".gif"; $flag=1; }
if (($fname =? /?.jpe?g$/i && $jpeg)) { $tail=".jpg"; $flag=1; }
if ($fname =? /?.png$/i && $png) { $tail=".png"; $flag=1; }
if ($fname =? /?.lzh$/i && $lha) { $tail=".lzh"; $flag=1; }
if ($fname =? /?.txt$/i && $text) { $tail=".txt"; $flag=1; }
if ($fname =? /?.zip$/i && $zip) { $tail=".zip"; $flag=1; }
if ($fname =? /?.pdf$/i && $pdf) { $tail=".pdf"; $flag=1; }
if ($fname =? /?.mid$/i && $midi) { $tail=".mid"; $flag=1; }
if ($fname =? /?.doc$/i && $word) { $tail=".doc"; $flag=1; }
if ($fname =? /?.xls$/i && $excel) { $tail=".xls"; $flag=1; }
if ($fname =? /?.ppt$/i && $ppt) { $tail=".ppt"; $flag=1; }
if ($fname =? /?.ram$/i && $ram) { $tail=".ram"; $flag=1; }
if ($fname =? /?.rm$/i && $rm) { $tail=".rm"; $flag=1; }
if ($fname =? /?.mpe?g$/i && $mpeg) { $tail=".mpg"; $flag=1; }
if ($fname =? /?.mp3$/i && $mp3) { $tail=".mp3"; $flag=1; }
# アップロード失敗処理
if (!$flag && !$clip_err) { }
elsif (!$flag && $clip_err) {
&error("アップロードできないファイル形式です");
$upfile = $in{'upfile'};
# マックバイナリ対策
if ($macbin) {
$length = substr($upfile,83,4);
$length = unpack("%N",$length);
$upfile = substr($upfile,128,$length);
# 添付データを書き込み
$ImgFile = "$ImgDir$no$tail";
if (!open(OUT,"> $ImgFile")) {
if ($clip_err) { &error("画像のアップロードに失敗しました"); }
binmode(OUT);
binmode(STDOUT);
print OUT $
close(OUT);
chmod (0666,$ImgFile);
# 画像サイズ取得
if ($tail eq ".jpg") { ($W, $H) = &JpegSize($ImgFile); }
elsif ($tail eq ".gif") { ($W, $H) = &GifSize($ImgFile); }
elsif ($tail eq ".png") { ($W, $H) = &PngSize($ImgFile); }
# 画像表示縮小
if ($W > $MaxW || $H > $MaxH) {
$W2 = $MaxW / $W;
$H2 = $MaxH / $H;
if ($W2 < $H2) { $key = $W2; }
else { $key = $H2; }
$W = int ($W * $key) || 1;
$H = int ($H * $key) || 1;
#--------------#
ワード検索
#--------------#
sub find {
print <<"EOM";
ワード検索
検索したいキーワードを入力し「検索」ボタンを押してください。
キーワードは「半角スペース」で区切って複数指定することができます。
キーワード
foreach ("AND", "OR") {
if ($in{'cond'} eq $_) {
print "$_?n";
print "$_?n";
print "?n?n?n";
# ワード検索の実行と結果表示
if ($in{'word'} ne "") {
# キーワードを配列化
$in{'word'} =? s/ / /g;
@wd = split(/?s+/, $in{'word'});
# 検索処理
print "?n";
open(IN,"$logfile") || &error("Open Error : $logfile");
while () {
foreach $wd (@wd) {
if (index($_,$wd) >= 0) {
if ($in{'cond'} eq 'OR') { }
if ($in{'cond'} eq 'AND') { $flag=0; }
if (!$flag) { }
# 結果を表示
($no,$date,$name,$mail,$sub,$com,$url) = split(//);
if ($mail) { $name = ""; }
print "[$no] $sub ";
print "投稿者:$name 投稿日:$date ";
print "[]" if ($url);
print "$com?n";
close(IN);
print "- 検索結果は $i件です -?n";
print "?n?n";
#--------------#
管理モード
#--------------#
sub admin {
if ($in{'pass'} ne "" && $in{'pass'} ne $pass) {
&error("パスワードが違います");
if ($PostMode && $in{'action'} eq "form") { &PostF }
print "[]?n";
print "?n";
print "管理モード?n";
print "?n";
if ($in{'pass'} eq "") {
print "パスワードを入力して下さい?n";
print "?n";
print "?n";
if ($PostMode) {
print "ログ管理?n";
print "記事投稿?n";
print "?n";
# 画像許可
if ($in{'chk'}) {
@CHK = split(/?0/, $in{'chk'});
# ロック処理
if ($lockkey) { & }
# 画像情報をマッチングし更新
open(IN,"$logfile") || &error("Open Error : $logfile");
@lines = ;
close(IN);
foreach (@lines) {
($no,$date,$name,$mail,$sub,$com,$url,$host,$pw,$tail,$w,$h,$time2,$chk) = split(//);
foreach $c (@CHK) {
if ($no == $c) {
$_="$no$date$name$mail$sub$com$url$host$pw$tail$w$h$time21?n";
push(@new,$_);
open(OUT,">$logfile") || &error("Write Error : $logfile");
print OUT @
close(OUT);
# ロック解除
if ($lockkey) { & }
# 削除処理
if ($in{'del'}) {
@DEL = split(/?0/, $in{'del'});
# ロック処理
if ($lockkey) { & }
# 削除情報をマッチングし更新
open(IN,"$logfile") || &error("Open Error : $logfile");
@lines = ;
close(IN);
foreach (@lines) {
($no,$date,$name,$mail,$sub,
$com,$url,$host,$pw,$tail) = split(//);
foreach $del (@DEL) {
if ($no == $del) {
if (-e "$ImgDir$no$tail")
{ unlink("$ImgDir$no$tail"); }
if ($flag == 0) { push(@new,$_); }
open(OUT,">$logfile") || &error("Write Error : $logfile");
print OUT @
close(OUT);
# ロック解除
if ($lockkey) { & }
# 削除画面を表示
print "?n";
print "?n";
print "?n";
print "記事を削除する場合は「削除」のチェックボックスにチェックを入れ「送信する」を押して下さい。?n";
if ($ImageCheck) { print "画像許可を行なう場合は「画像許可」のチェックボックスにチェックを入れ「送信する」を押して下さい。?n"; }
print "?n";
print "?n";
print "削除記事No投稿日題名";
print "投稿者コメントホスト名添付(Bytes)";
if ($ImageCheck) { print "画像許可"; }
print "?n";
open(IN,"$logfile") || &error("Open Error : $logfile");
while () {
$img_flag=0;
($no,$date,$name,$mail,$sub,$com,$url,$host,$pw,$tail,$w,$h,$time2,$chk) = split(//);
($date) = split(/?(/, $date);
if ($mail) { $name=""; }
$com =? s///
$com =? s//&/g;
if (length($com) > 40) {
$com = substr($com,0,38);
$com .= "..";
if (-e "$ImgDir$no$tail") {
if ($tail eq ".gif" || $tail eq ".jpg" || $tail eq ".png") {
$img_flag = 1;
$File = "画像";
} else { $File = "File"; }
$clip = "";
$size = -s "$ImgDir$no$tail";
$clip = "";
$size = 0;
print "$no$date$sub";
print "$name$com";
print "$host$clip($size)?n";
# 画像許可
if ($ImageCheck) {
if ($img_flag == 1 && $chk == 1) {
print "OK";
} elsif ($img_flag == 1 && $chk != 1) {
print "?n";
close(IN);
print "?n";
print "?n";
$all = int ($all / 1024);
print "【添付データ総数 : $all KB】?n";
print "?n?n";
#------------------#
ユーザ記事削除
#------------------#
sub usrdel {
if ($in{'no'} eq '' || $in{'pwd'} eq '')
{ &error("削除Noまたは削除キーが入力モレです"); }
# ロック処理
if ($lockkey) { & }
open(IN,"$logfile") || &error("Open Error : $logfile");
@lines = ;
close(IN);
foreach (@lines) {
($no,$date,$name,$mail,$sub,$com,$url,$host,$pw,$tail) = split(//);
if ($in{'no'} eq "$no") { $flag=1; $PWD=$ $upfile="$no$tail" }
else { push(@new,$_); }
if ($flag == 0) { &error("該当記事が見当たりません"); }
if ($PWD eq '') { &error("該当記事には削除キーが設定されていません"); }
# 削除キーを照合
$match = &decrypt("$in{'pwd'}","$PWD");
if ($match ne 'yes') { &error("削除キーが違います"); }
# ログを更新
open(OUT,">$logfile") || &error("Write Error : $logfile");
print OUT @
close(OUT);
# 添付ファイルがあれば削除
unlink("$ImgDir$upfile") if (-e "$ImgDir$upfile");
# ロック解除
if ($lockkey) { & }
#----------------#
投稿フォーム
#----------------#
sub form {
# クッキー情報を取得
local($cname, $cmail, $curl, $cpwd) = &get_
print <<"EOM";
メッセージ
if (!$PostMode) {
print "削除キー?n";
print "?n";
print "(記事の削除用。英数字で8文字以内)?n";
print <<"EOM";
クッキー情報を保存
#------------------------#
管理者用投稿フォーム
#------------------------#
sub PostForm {
print "[]?n";
print "?n";
print "管理者用投稿フォーム?n";
print "?n?n";
#----------------#
デコード処理
#----------------#
sub decode {
while (($key,$val) = each %in) {
if ($key ne "upfile") {
# シフトJISコードに変換
&jcode'convert(*val, "sjis", "", "z");
# タグ処理
$val =? s/&/&/g;
$val =? s/"/&/g;
$val =? s//&/g;
# 改行処理
if ($key eq "comment") {
$val =? s/?r?n//g;
$val =? s/?r//g;
$val =? s/?n//g;
$val =? s/?r//g;
$val =? s/?n//g;
$in{$key} = $
$mode = $in{'mode'};
$page = $in{'page'};
$in{'url'} =? s/^http?:?/?///;
if ($in{'sub'} eq "") { $in{'sub'} = "無題"; }
# 日時の取得
$ENV{'TZ'} = "JST-9";
($min,$hour,$mday,$mon,$year,$wday) = (localtime($times))[1..6];
# 日時のフォーマット
@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$date = sprintf("%04d/%02d/%02d(%s) %02d:%02d",
$year+1900,$mon+1,$mday,$week[$wday],$hour,$min);
#--------------#
HTMLヘッダ
#--------------#
sub header {
$head_flag = 1;
print "Content-type: text/html?n?n";
print <<"EOM";
#--------------#
エラー処理
#--------------#
sub error {
if ($lockflag) { & }
&header if (!$head_flag);
print "ERROR !?n";
print "$_[0]?n";
print "?n?n?n";
#------------------#
クッキーの発行
#------------------#
sub set_cookie {
local($gmt, $cook, @t, @m, @w);
@t = gmtime(time + 60*24*60*60);
@m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
@w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",
$w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]);
$cook = "$in{'name'}$in{'email'}$in{'url'}$in{'pwd'}";
print "Set-Cookie: CLIPBOARD=$ expires=$gmt?n";
#------------------#
クッキーを取得
#------------------#
sub get_cookie {
local($key, $val, *cook);
$cook = $ENV{'HTTP_COOKIE'};
foreach (split(/;/, $cook)) {
($key, $val) = split(/=/);
$key =? s/?s//g;
$cook{$key} = $
@cook = split(//, $cook{'CLIPBOARD'});
#----------------#
ホスト名取得
#----------------#
sub get_host {
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq "" || $host eq $addr) {
$host = gethostbyaddr(pack("C4", split(/?./, $addr)), 2) || $
#----------------------#
パスワード暗号処理
#----------------------#
sub encrypt {
local($inpw) = $_[0];
local(@SALT, $salt, $encrypt);
@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
$encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt);
#----------------------#
パスワード照合処理
#----------------------#
sub decrypt {
local($inpw, $logpw) = @_;
local($salt, $key, $check);
$salt = $logpw =? /^?$1?$(.*)?$/ && $1 || substr($logpw, 0, 2);
$check = "no";
if (crypt($inpw, $salt) eq $logpw || crypt($inpw, '$1$' . $salt) eq $logpw)
{ $check = "yes"; }
#--------------#
ロック処理
#--------------#
sub lock {
# 1分以上古いロックは削除する
if (-e $lockfile) {
local($mtime) = (stat($lockfile))[9];
if ($mtime < time - 60) { & }
local($retry) = 5;
# symlink関数式ロック
if ($lockkey == 1) {
while (!symlink(".", $lockfile)) {
if (--$retry <= 0) { &error('LOCK is BUSY'); }
# mkdir関数式ロック
} elsif ($lockkey == 2) {
while (!mkdir($lockfile, 0755)) {
if (--$retry <= 0) { &error('LOCK is BUSY'); }
$lockflag=1;
#--------------#
ロック解除
#--------------#
sub unlock {
if ($lockkey == 1) { unlink($lockfile); }
elsif ($lockkey == 2) { rmdir($lockfile); }
$lockflag=0;
#--------------#
メール送信
#--------------#
sub mail_to {
local($com, $hp, $mail_sub, $mail_body);
# メールタイトル定義
= "[$title : $no] $in{'sub'}";
# コメント内の改行復元
$com = $in{'comment'};
$com =? s//?n/
if ($in{'url'}) { $hp = "http://$in{'url'}"; }
else { $hp = ""; }
# メール本文を定義
$mail_body = <<"EOM";
投稿日時:$date
ホスト名:$host
ブラウザ:$ENV{'HTTP_USER_AGENT'}
投稿者名:$in{'name'}
Eメール:$in{'email'}
タイトル:$in{'sub'}
投稿記事:
# 文字コード変換
&jcode'convert(*mail_sub,'jis');
&jcode'convert(*mail_body,'jis');
open(MAIL,"| $sendmail -t");
print MAIL "To: $mailto?n";
print MAIL "Errors-To: $mailto?n";
# メールアドレスがない場合は管理者メールに置き換え
if ($in{'email'} eq "") { $email = $ }
else { $email = $in{'email'}; }
print MAIL "From: $email?n";
print MAIL "Subject: $mail_sub?n";
print MAIL "MIME-Version: 1.0?n";
print MAIL "Content-type: text/ charset=ISO-2022-JP?n";
print MAIL "Content-Transfer-Encoding: 7bit?n";
print MAIL "X-Mailer: $ver?n?n";
print MAIL "--------------------------------------------------------?n";
print MAIL "$mail_body?n";
print MAIL "--------------------------------------------------------?n";
close(MAIL);
#--------------#
自動リンク
#--------------#
sub auto_link {
$_[0] =? s/([^=^?"]|^)(http?:[?w?.???-?/???&?=?@?;?#?:?%]+)/$1$2/g;
#------------------#
JPEGサイズ認識
#------------------#
sub JpegSize {
local($jpeg) = @_;
local($t, $m, $c, $l, $W, $H);
open(JPEG, "$jpeg") || return (0,0);
binmode JPEG;
read(JPEG, $t, 2);
while (1) {
read(JPEG, $t, 4);
($m, $c, $l) = unpack("a a n", $t);
if ($m ne "?xFF") { $W = $H = 0; }
elsif ((ord($c) >= 0xC0) && (ord($c) <= 0xC3)) {
read(JPEG, $t, 5);
($H, $W) = unpack("xnn", $t);
read(JPEG, $t, ($l - 2));
close(JPEG);
return ($W, $H);
#-----------------#
GIFサイズ認識
#-----------------#
sub GifSize {
local($gif) = @_;
local($data);
open(GIF,"$gif") || return (0,0);
binmode(GIF);
sysread(GIF,$data,10);
close(GIF);
if ($data =? /^GIF/) { $data = substr($data,-4); }
$W = unpack("v",substr($data,0,2));
$H = unpack("v",substr($data,2,2));
return ($W, $H);
#-----------------#
PNGサイズ認識
#-----------------#
sub PngSize {
local($png) = @_;
local($data);
open(PNG, "$png") || return (0,0);
binmode(PNG);
read(PNG, $data, 24);
close(PNG);
$W = unpack("N", substr($data, 16, 20));
$H = unpack("N", substr($data, 20, 24));
return ($W, $H);
#----------------#
留意事項表示
#----------------#
sub note {
print <<"EOM";
ファイル添付時の留意事項
$MaxData = int ($cgi_lib'maxdata / 1024);
if ($gif) { $FILE .= "GIF, "; }
if ($jpeg) { $FILE .= "JPEG, "; }
if ($png) { $FILE .= "PNG, "; }
if ($text) { $FILE .= "TEXT, "; }
if ($lha) { $FILE .= "LHA, "; }
if ($zip) { $FILE .= "ZIP, "; }
if ($pdf) { $FILE .= "PDF, "; }
if ($midi) { $FILE .= "MIDI, "; }
if ($word) { $FILE .= "WORD, "; }
if ($excel) { $FILE .= "EXCEL, "; }
if ($ppt) { $FILE .= "POWERPOINT, "; }
if ($rm) { $FILE .= "RM, "; }
if ($ram) { $FILE .= "RAM, "; }
if ($mpeg) { $FILE .= "MPEG, "; }
if ($mp3) { $FILE .= "MP3, "; }
$FILE =? s/?, $//;
print "投稿時にファイルを添付する事ができます。?n";
print "ただし、ブラウザはインターネットエクスプローラ4 またはネットスケープ4 以上である必要があります。?n";
print "添付可能?ファイル → $FILE?n";
print "最大投稿データ量は $MaxData KB までです。?n";
print "画像は横 $MaxWピクセル、縦 $MaxHピクセルを超えると縮小表?示されます。?n";
if ($ImageCheck) {
print "画像に限り管理者が許可するまで「COMING SOON」が仮表?示されます。?n";
print "?n?n";
print "?n?n";
#------------------#
チェックモード
#------------------#
sub check {
print "Check Mode?n";
print "?n";
# ログファイル
if (-e $logfile) {
print "ログファイル:パスOK!?n";
if (-r $logfile && -w $logfile) { print "ログパーミッション:OK!?n"; }
else { print "ログパーミッションが不正です。?n"; }
} else { print "ログファイルのパスが不正です: $logfile?n"; }
# 画像ディレクトリ
if (-d $ImgDir) {
print "アップロードディレクトリ:パスOK!?n";
if (-r $ImgDir && -w $ImgDir && -x $ImgDir) {
print "アップロードディレクトリのパーミッション:OK!?n";
} else { print "アップロードディレクトリのパーミッションが不正です。?n"; }
} else { print "アップロードディレクトリのパスが不正です: $ImgDir?n"; }
# ロックディレクトリ
print "ロック形式:";
if ($lockkey == 0) { print "ロック設定なし?n"; }
if ($lockkey == 1) { print "symlink?n"; }
else { print "mkdir?n"; }
($lockdir) = $lockfile =? /(.*)[???/].*$/;
print "ロックディレクトリ:$lockdir?n";
if (-d $lockdir) {
print "ロックディレクトリのパス:OK?n";
if (-r $lockdir && -w $lockdir && -x $lockdir) {
print "ロックディレクトリのパーミッション:OK?n";
print "ロックディレクトリのパーミッション:NG → $lockdir?n";
} else { print "ロックディレクトリのパス:NG → $lockdir?n"; }
print "?n?n?n";

我要回帖

更多关于 yardthip 的文章

 

随机推荐