#!/usr/bin/perl #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #+++  [ tackynotespsp Ver0.6 ] 2002.02.20 UPDATE!! #+++ ・・・・・>>> All Created by Tacky #+++ ・・・・・>>> Copyright (c) 2001.10 Tacky's Room. All rights reserved.... #+++ Email >>> tacky2@ops.dti.ne.jp #+++ Homepage >>> http://tackysroom.com/ #+++ #+++ 設置方法構成(具体例) #+++ #+++ public_html(ホームページディレクトリ) #+++ |-- cgi-bin(任意のディレクトリ) #+++ |-- jcode.pl (755)…(日本語ライブラリ) #+++ |-- tackynotesp.cgi (755)…(スクリプト本体) #+++ |-- notelog -- (777)…(ログ保存用フォルダ) #+++ | |-- 200110.txt …CGI内部で自動作成します #+++ | |-- 200111.txt …CGI内部で自動作成します #+++ |-- noteimg -- (777)…(画像保存用フォルダ) #+++ |-- xxxx.gif …(画像)…ファイル名はアップロードするファイル名そのままです。 #+++ #+++ ■画像アップロードはPerl5以上が必要です。多分。(^^;;; hi-hoは確かダメ。 #+++ #+++ ■( )内はパーミッッションの値です。 #+++ #+++ ■tackynotespsp.cgi :Perlのパス、その他の項目を修正、テキストモードでアップロード。 #+++ #+++ >>> Update-History... #+++ #+++ 2002.02.20(Ver0.6) >> #+++  ・いい加減に「β版」はやめる事にしました。(^^;;; #+++  ・表示方法設定項目($monthview)に'week'を指定すると『週単位』+『1ヶ月分表示』を出来るようにしました #+++  ・年月移動した際に「ログをダウンロード」ボタンが消える不具合修正 #+++  ・日記を書く時の「文字色」が「レス文字色」を元に表示していた不具合修正 #+++  ・半角カンマを全角カンマに強制置換するのをやめました。 #+++  ・タイトル及び本文に「+(プラス)」を入力するとスペースになる不具合修正 #+++ 2001.11.19(Ver0.5d) >> #+++  ・入力フォームにおいて背景色を指定し、ログ表示部の背景色を変更出来るようにしました。 #+++  ・入力フォームの文字色指定をSELECTボックスからRADIOボタンに変更しちゃいました。(^^;;; #+++  ・画像表示する際の文章回り込み指定を可能にしました。 #+++  ・スクロールバーの色変更を設定出来るようにしました。 #+++  ・最新投稿を開き、新規投稿をクリックすると、入力フォームの月が1月になるバグを修正 #+++ ・最新投稿件数を設定しても反映していないバグを修正 #+++ ・「みんなで日記を書く」の設定で「タイトル無し」で投稿した場合、「名前」が表示されないバグを修正 #+++ 2001.11.04(Ver0.5c) >> #+++  ・違う月の同一記事Noに対してレスがある場合、違う月のレスまで一緒に仲良く表示されるバグを修正。(^^ゞ #+++  ・日記本文と日付表示部の枠の色を別々に表示出来るようにしました。(msg_bordercolor2が効力無かっただけ(^^;;;) #+++  ・最新レス及び投稿画面で修正・削除が可能になっているようにしておりましたが、 #+++   違う月で同一記事Noを発生させる仕様にした為無理がありましたので同画面からはメンテナンス不可としました #+++  ・画像サイズ取得出来ない場合があるバグを修正。 #+++  ・管理人でもタグ使えないバグを修正 #+++ 2001.11.03(Ver0.5b) >> #+++  ・画像サイズ取得出来ない場合があるバグを修正。 #+++ 2001.11.02(Ver0.5a) >> #+++  ・$simaru=''の指定時に投稿No等は表示されないバグ対応。                                           #+++  ・「ログをダウンロード」のボタンが表示されない場合があるバグ対応 #+++  ・「説明画面」でのアイコン一覧を一列何個表示の指定を追加        #+++  ・縮小画像から通常サイズを表示する際のロジックを修正。ネスケで開けなかったし。(^^ゞ #+++  ・通常サイズ表示は「画像サイズの大きさで開く」と「新規ウインドウとして開く」の設定を追加 #+++  ・著作権表記が消えちゃうバグ修正。(^-^;                                       #+++  ・画像ファイル名に「&」が入っていると通常サイズで表示出来ないバグ対応。                 #+++  ・初期表示を「前日」にするか「当日」を設定出来るようにしました #+++ 2001.10.27(Ver0.5) >> ・β版リリース #+++ #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ require './jcode.pl'; #日本語コード変換 $url = ""; #戻り先URL $script = "./test.cgi"; #このCGIの名前を指定 $titlename = '日記'; #タイトルを指定 $titlelogo = ''; #タイトル画像を指定。src=の後ろに画像のパスを指定してね。(使用しない場合は、''で良い) $bgcolor = '#ffffff'; #背景色を指定 $backpicture = ''; #背景画像を指定(使用しない場合は、''で良い) $tbgcolor = '#FFFFCC'; #入力フォームの背景色を指定 $ftextcolor = '#333333'; #入力フォームの文字色を指定 $calcolor = '#ffffff'; #カレンダー部分のセル背景色を指定 $calbordercolor = '#c20000'; #カレンダー部分の枠線の色を指定 $msg_cellbgcolor = '#FFFFFF'; #日記部分の本文セル背景色を指定 $msg_bordercolor2 = '#DBCCB3'; #日記部分の日付枠線の色を指定 $msg_cellbgcolor2 = '#c20000'; #日記部分の日付セル背景色を指定 $msg_celltxcolor2 = '#ffffff'; #日記部分の日付セル文字色を指定 #下記の背景色指定をした場合に、上記の$msg_cellbgcolor2やtxcolor2の色指定ではなくって、 #指定した背景色とそれに対応した文字色と同じ色で「日付表示部分」を表示する場合は1。上記の指定にする場合は0。 #・・・って指定細かすぎ?だって・・・こだわりたいのだー!(笑)<と無駄なソースをばんばん埋め込むσ(^_^)。 $awaseru = 1 ; $colb_use = 1; #(0:色指定する 1:色指定しない) #$colb_useが1(指定しない)場合は、下記の1番目の色を採用します。 #入力フォーム・背景色の指定 @COLORS_B = ('#ffffff','#B1D23E','#E7DE38','#81BEC9','#F1A287','#E1BAE2','#FBF7A6','#E1E1E1','#FFDD55','#EF653D'); #背景色に対してのタイトルやレスフォーム部分の文字色もやっぱり変更出来ないとだめだね。っちゅー訳で文字色。@COLORS_Bと同じ数だけ指定してね。 #$colb_useが1(指定しない)場合は、下記の1番目の色を採用します。 @COLORS_F = ('#B00000','#005E00','#EF5918','#075981','#808080','#C9A574','#C67575','#8C5184','#98BAC9','#FFA500'); $password = 'pass'; #メンテナンス用パスワード(管理者用) #<<<祝日の設定(成人の日・体育の日・春分の日・秋分の日は除きます) @holiday = ('0101','0211','0429','0503','0504','0505','0720','0915','1103','1123','1223'); #◆<<< 指定年月のログを、一度に1ヶ月分表示させるか?(yes,no,week)。 #◆<<< noの場合は一日ずつ表示(一日毎にクリックするとログを表示するパターン) #◆<<< weekの場合は週単位で表示(1ヶ月分表示する事も可能です) $monthview = 'yes'; #◆<<< 上記の$monthviewが'no'以外の場合、 #◆<<< ログを昇順(上から1〜31日)に表示するなら'1',降順(上から31〜1日)の場合'2' $viewsort = 2; #◆<<< カレンダー部分(ひとマス)のheight,width(四角形なので、設定値も1個だけね)40以上だとちょっと縦長になるけど我慢。 $calsize = 20 ; #Pixel #◆<<< ↓お好きなようにどうぞ。例: ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') @week = ('日','月','火','水','木','金','土'); $col = 51 ; #日記を書く欄の横桁数(80だと日本語で40文字です) $row = 10 ; #日記を書く欄の行数 #========================================================================================== #>>>カレンダー部分に『日記を書いた日』である事を認識させる設定 #========================================================================================== # $icon_gif[0]が設定されている場合は、$icon_gif[n]を優先的に表示させます。 # $icon_gif[0]が設定されていない場合(削除してもいいけど)は # $img_gifが設定されていれば$img_gifの画像を表示、未設定の場合は■を表示します。 #1個のアイコンだけを使用する場合 $img_gif = './saru.gif'; #"メモを書いた日"に表示する画像を指定。(指定しないと■が表示されます) #複数のアイコンを使用する場合。たくさん設定した場合、$icon[4]...$icon[9]のようにただ増やしていけばいいです。 $icon[0]='../../seedling.gif' ; $iconnm[0]='1'; $icon[1]='../../duckling3.gif' ; $iconnm[1]='2'; $icon[2]='../../note3.gif' ; $iconnm[2]='3'; $icon[3]='../../movie1.gif' ; $iconnm[3]='4'; $icon[4]='../../grape.gif' ; $iconnm[4]='5'; $icon_w = 13; #アイコン横サイズ(全アイコンが同じサイズの場合。異なる場合は0にしてね) $icon_h = 13; #アイコン縦サイズ(全アイコンが同じサイズの場合。異なる場合は0にしてね) $disp_icon = 0 ; #日記を表示した際に日記の横にアイコンも表示する?(0:no 1:yes) #================================================================================================================== #>>>日記表示部に表示するアイコンの設定 $disp_icon = 1(yes)の設定の場合のみ有効。noの場合は無視していいです。 #================================================================================================================== $onaji = 1; #カレンダーに表示するアイコンと同じアイコンを使う?(0:no 1:yes) #アイコン・アイコン名称・アイコンの幅・アイコンの高さ。 幅と高さがわからない場合は、$icon2_w[0]=0;のように0を指定してね。 #アイコンを追加する場合は、$icon2[4]...$icon2[9]のようにただ増やしていけばいいです。 $icon2[0] = '../hide/ball.gif' ; $iconnm2[0] = '気分はボール' ; $icon2_w[0] = 32 ; $icon2_h[0] = 32 ; $icon2[1] = './corgi.gif' ; $iconnm2[1] = '気分はコーギー' ; $icon2_w[1] = 32 ; $icon2_h[1] = 32 ; $icon2[2] = './cow.gif' ; $iconnm2[2] = '気分はうし' ; $icon2_w[2] = 32 ; $icon2_h[2] = 32 ; $icon2[3] = './denchi.gif' ; $iconnm2[3] = '気分は電池' ; $icon2_w[3] = 32 ; $icon2_h[3] = 32 ; #アイコン一覧を表示する際、1行にアイコンを何個表示します? $icon_line = 3 ; #←の場合、3個表示したら改行するって事です。 $tcolor = "#000000"; # 文字色 $linkcolor = "#006666"; # リンク色(未読リンク) $vlinkcolor = "#336633"; # リンク色(既読リンク) $alinkcolor = "#FFFF00"; # リンク色(押した時) $hovercolor = '#ff0000'; #リンクをポイントした際のアンダーライン色(IEのみ) u000301 $pt = '9pt'; #全体のフォントサイズ(pt指定以外何があるのか、僕知らない。(^^ゞ) $back_gif = '../../prev6.gif'; #「1ヶ月戻る」用画像(使用しない場合は'') $next_gif = '../../next6.gif'; #「1ヶ月進む」用画像(使用しない場合は'') $setyear_b = 0; #カレンダーを年月指定で移動する場合、「年」は過去何年まで表示します?(1の場合、前年まで表示) $setyear_a = 1; #カレンダーを年月指定で移動する場合、「年」は未来何年まで表示します?(5の場合、5年先まで表示) $tbl_sz = '400' ; #日記表示部のテーブル横幅(ピクセル又は%) $color_nml = '#2f4f4f'; #カレンダー・「平日」の文字色 $color_sat = '#396b95'; #カレンダー・「土曜日」の文字色 $color_sun = '#d23c3c'; #カレンダー・「日曜日」の文字色 $color_hol = '#d23c3c'; #カレンダー・「祝日」の文字色 $color_today = '#E1D2BA'; #カレンダー・「今日」の背景色 $resflg = 1 ; #レス機能を使用する?(0:しない 1:する) #投稿時のパスワードをcrypt関数を使用する(暗号化) #crypt関数が利用出来ない場合もありますので、投稿時にエラーになる場合は、「0:使用しない」にして下さいね。 $ango = 1 ; #0:使用しない 1:使用する (推奨:1:使用する) #色の指定(1行レス投稿時の文字色)。色を増やしたい場合は、'#336699','#003366'のようにどんどん増やしていいですよ。 @COLORS = ('#B00000','#005E00','#EF5918','#075981','#808080','#C9A574','#C67575','#8C5184','#98BAC9','#FFA500'); @COLORSNM = ('あか','みどり','オレンジ','あお','グレー','ゴールド','ピンク','むらさき','みずいろ','きいろ'); #1行レス投稿フォームでの返信ボタンに表示する文字 $resword = ' オ ス '; $titleflg = 1 ; #日記に「タイトル」が必要?(0:不要 1:必要) #掲示板荒らし対策。排除したいプロバのアドレスを設定して下さい。 # "xxx?.com"とした場合、"xxx1.com","xxx2.com"等、「?」の部分が文字列1つと判断します # "xxx*.com"とした場合、"xxx1.com","xxx12345.com等、「*」の部分が0個以上の文字列と判断します。 @DANGER_LIST=("xxx.com","yyy.com","zzz*.or.jp"); #掲示板荒らし対策その2。メッセージ最大文字数を指定。特に設定しない場合は、''として下さい。3000は全角1500文字です。 $Maxword = '' ; #レス投稿フォームのコメント入力欄は「1行テキスト」?「複数行テキスト」? $res_text = 0 ; #0:1行テキスト 1:複数行テキスト(テキストエリア) $sz = 60 ; #1行レス場合、1行の文字数は? $c_sz = 50 ; #複数行テキストの場合、1行の文字数 $r_sz = 3 ; #複数行テキストの場合、行数 $minnade = 0; #管理人以外も日記を書けるようにする?(0:しない 1:する) $minnade_gif = ''; #$minnade=1の場合に表示する「新規投稿用アイコン画像」を指定。画像を使用しない場合は''でいいです。その場合「新規投稿」と表示されます $zurazura = 1 ; #1日に複数回(人)日記を書いた場合、アイコンを1個しか表示しないようにする?(0:しない 1:する) $kiero = 1; #カレンダーを表示しますか?(0:no 1:yes)…同スクリプトに直接アクセスした際に、カレンダーを表示しないで、当月の日記部分のみ表示する場合は1となります i001109 #============================================================================================================================================================================================= #フォームCSS設定 ※使用しない場合は、$css_style = "";とし、そこから2行(先頭がEOMの行までを)を削除して下さい。 $css_style = <<""; #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Sendmailが使える方のみ以下の項目を設定して下さい。(Ver0.85からの機能) # ※Sendmailとは? #   メールソフトを立ち上げないで、指定した相手にメールを送る事が出来る機能です。 #   自分のプロバイダーがSendmailに対応しているか、パスはどこ?等は、各自のプロバイダー #   のHPでご確認して下さいね。 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #投稿時に管理者にメール送信する場合、sendmailのパスを指定 $sendmail = ""; #メール送信先アドレス。(管理者のアドレス)…「@」の前には必ず「¥」を付けてね。 $smail_address = "xxxxxx\@xxx.xx.jp"; $hiho = 0 ; #プロバイダーが「hi-ho」の人のみ「1」にして下さい。 ※Sendmail使う場合 $sinchaku = 5 ; #レス機能有にした場合、最新レスのあった日記を表示します。0の場合は表示しない、0以外は指定した数だけ表示します。 $sinchaku2 = 3 ; #最新投稿を表示します。0の場合は表示しない、0以外は指定した数だけ表示します。 $omakase = 3 ; #日記表示部分の「日付」が表示されてる所と、「本文」が表示されている #テーブルの間にある隙間をどれくらいにします?数字でよろしく。 #ログ表示の際、「日記の日付」・「投稿日付」の表示方法設定 #    ○:表示する ×:表示しない # $timedisp=1:「日記の日付:○」・「投稿日付:○」 # $timedisp=2:「日記の日付:○」・「投稿日付:×」 # $timedisp=3:「日記の日付:×」・「投稿日付:○」 # $timedisp=4:「日記の日付:×」・「投稿日付:×」 $timedisp = 1 ; $method = 'POST'; #METHODの指定(POST又はGET) $tag = 0 ; #管理人以外もタグ許可しますか?(0:no 1:yes) #<<< ログ設定…指定したディレクトリ($olddir)直下に"200101.txt".."200112.txt"(上4桁は年月)のように作成します #<<< ※CGIと同じ階層には、設置出来ません。必ずログ保存用フォルダを作成してください。 #<<< ※月単位に日記を保存します。 $logdir = './notelog/' ; #過去ログ作成用ディレクトリを指定。最後に必ず「/」を付けてね。 $target = '_top' ; #[HOME]をクリックした時のターゲット指定 $bdcolor = '#ffffff'; #所々に使っております横線(水平線)の色(IEだけ色変わる) $bdcolor2 = '#d3d3d3'; #レス有りの場合、本文とレス文の間の横線(水平線)の色(IEだけ色変わる) $dlsw = 1 ; #ログをダウンロード可能にする場合(Winのみ)は「1」を指定。 $simaru = '#c20000' ; #日記本文のテーブルに枠線要らない?要るなら線の色を。要らないなら''。 $set_font = 'Georgia, Arial, Helvetica, sans-serif'; #カレンダーの数字部分だけフォント指定出来ます。フォント名を「,」で区切ってズラズラと $findsw = 1 ; #「検索」を使用します?(0:使用しない 1:使用する) $mojisz = 2 ; #日記表示部分のフォントサイズ $spacer_gif = '../../'; #ダミー透過画像。画像はそのまま使用してね。パスだけ修正。 #▼タイトルの下に何か表示したいメッセージがあれば"EOM";の次の行からEOMの前の行にメッセージどうぞ。 # 表示しない場合は、"EOM";とEOMの間の行を削除してね。 $HEAD_COMMENT = <<"EOM"; 日記 EOM #★【画像アップロードを使わない場合は、「$UpFolder = "";」にしておいて他の画像アップに関する設定項目は無視していいですよ】 # アップロードディレクトリのパス → パスの最後は / を付けてください。 #※hi-hoの方は、$UpFolder = "$ENV{'HOME'}/html/画像フォルダ名/";として下さいね。 #※Niftyの方は、$UpFoler = "/homepage/画像フォルダ名/";でたぶん良いかと・・・(^^;;; $UpFolder = "../../"; # アップロードディレクトリのURLパス → パスの最後は / を付けてください。 #※hi-hoの方は、$UpUrl = "../../../ユーザー名/画像フォルダ名/"; #※Niftyの方は、$UpUrl = "http://homepage?.nifty.com/ユーザー名/画像フォルダ名/";でたぶん良いかと・・・(^^;;; #※画像がCGIフォルダに設置可能なサーバーをご使用の方は上記$UpFolderと同じでいいと思いますわ。 $UpUrl = "../../"; # 投稿受理最大サイズ (bytes) # → 例 : 102400 = 100KB $maxdatasz = '102400'; # 画像ファイルの最大表示サイズ(Pixel)。サイズを超えた場合は画像縮小表示。 $MaxWidth = 300; #横幅 ※必ず指定して下さい。どうしても縮小したくない方は999999とかにしてね。 $MaxHeight = 150; #縦幅 ※必ず指定して下さい。どうしても縮小したくない方は999999とかにしてね。 $point = 1 ; #画像の表示位置(1:Left 2:Center 3:Right) $maware = 0 ; #画像に対して文章の回り込みをしますか?しない場合は1行下から文章が表示されます。 $sizeflg = 0 ; #画像の下にファイルサイズを表示しますか?(0:no 1:yes) ※$maware=1の場合はファイルサイズ表示せずimgタグのALTで表示されます #ログ表示部の画像をクリックし、通常サイズの画像を表示する場合、 #1:画像の大きさのウインドウを開き画像を表示。 #2:新規ウインドウを開き画像を表示。※広告バナーが表示されるサーバーの方はこちらの設定ですね。 $imglink = 1 ; #初期表示は一日前の日記を表示する? $initdisp = 0 ; #0:当日 1:前日 #アップロード可能とするファイル形式。 ※追加可。 @FMT = ("gif","jpg","jpeg","png"); @errtag = ('table','meta','form','!--','embed','html','body','tr','td','th','a'); #デンジャラ〜なタグ #スクロールバーの色変更。よくわからない方は、"EOM"の次の行から先頭がEOMの行の間(7行)を削除してね。 $scrollbar = <<""; #============================================================================================================================================================================================= #<<< ここから下はいじらない方が身のためです。 ############################################################################### #### Main Process START ##################################################### ############################################################################### $agent = $ENV{'HTTP_USER_AGENT'}; #i000429 if ($agent !~ /MSIE/i) { $css_style = "" ; } #i000429 #<<<システム日時・時刻取得 @cdays = (0,31,28,31,30,31,30,31,31,30,31,30,31); $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $syear = sprintf("%02d",$year + 1900);$smonth = sprintf("%02d",$mon + 1);$sday = sprintf("%02d",$mday); $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $hour = sprintf("%02d",$hour);$min = sprintf("%02d",$min); $sysdate = "$syear/$smonth/$sday($week) $hour:$min"; if ( $initdisp == 1 ) { $iday = time + 86400 * (-1); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($iday); $syear = sprintf("%02d",$year + 1900);$smonth = sprintf("%02d",$mon + 1);$sday = sprintf("%02d",$mday); } if ( $UpFolder && !(-e $UpFolder) ) { &error("画像アップロード先のフォルダが存在していません。"); } &cookieget; #<<\n"; print "\n"; print ""; print "\n"; exit; } elsif ( $FORM{'action'} eq 'download' ) { #ログをダウンロードするi001108 &download ; } elsif ( $FORM{'action'} eq 'icondisp' ) { #アイコン一覧を見る &icondisp ; } elsif ( $FORM{'action'} eq 'resdisp' ) { #最新レス一覧を見る &header ; #htmlヘッダー出力 &view ; } elsif ( $FORM{'action'} eq 'view' ) { #ログファイル更新(編集時) &header ; #htmlヘッダー出力 &calender ; #カレンダー表示 &view ; #ログ表示 } else { if ( $FORM{'action'} eq 'regist' ) { ®ist ; } &header ; #htmlヘッダー出力 &calender ; #カレンダー表示 &view ; #ログ表示 } &footer ; #htmlフッター出力 exit; ############################################################################### #### Main Process END ####################################################### ############################################################################### ###<-------------------------------------------------------------- ###<--- デコード&変数代入 ###<-------------------------------------------------------------- sub decode{ if ( $ENV{CONTENT_TYPE} =~ /multipart\/form-data/) { local($buff,$buff2,$key,$len,$idx,@LIST) ; if ( $ENV{'CONTENT_LENGTH'} > $maxdatasz ) { &error("アップロードファイルのサイズが" . int($maxdatasz / 1024) . "kbを超えている為アップロード出来ません。"); } # 標準入力からデータを読込む $buff = ""; read(STDIN, $buff, $ENV{'CONTENT_LENGTH'}); if ($buff =~ /application\/x-macary/i) { $mac=1; } $buff =~ /^(.+)[\r|\n]/; $buff2 = $1; $buff2 =~ s/[\r|\n]//; # 切り取る @LIST = (); @LIST = split(/$buff2/, $buff); shift @LIST; pop @LIST; #余計なものはいらない foreach (@LIST){ #キー情報を取得 $key = ""; $key = $1 if ($_ =~ /name="(.*)";/); if ($key eq ""){ # ファイル以外のコントロールの場合 $key = $1 if ($_ =~ /name="(.*)"/); if ($key eq "") { next ; } } #アップロードファイル名をフルパスからファイル名を抽出。 $upfname = ""; if ($_ =~ /filename="(.*)"/){ $upfname = $1;$upfname=~s/.+(\/|\\)//; } #値情報を抽出 if ( $upfname ne '' ) { $idx = index $_, 'Content-Type:' ; } else { $idx = index $_, 'Content-Disposition:'; } $len = length($_); if ($idx != -1){ #$_の文字列の中で$idxの位置より\r\n(改行コード)が見つかった位置を$idxに返却 ※先頭は0 $idx = index $_, "\r\n", $idx; if ($idx != -1){ $idx += 4; # 最後の\r\nはつけないようにする $value = substr($_, $idx, $len - $idx - 2); if ( $upfname eq '' ) { # $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\,/&knm/g; &jcode'convert(*value,'sjis'); } $FORM{$key} = $value; } } } } else { 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/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\,/&knm/g; # $value =~ s/\,/,/g; &jcode'convert(*value,'sjis'); $FORM{$name} = $value; } } if ($FORM{'pass'} ne $password ) { if ( $tag == 0 ) { $FORM{'comment'} =~ s//>/g; } else { foreach ( @errtag ) { if ($FORM{'comment'} =~ /<$_(.|\n)*>/i) { &error("使用出来ないタグが入力されています"); } } } } $FORM{'comment'} =~ s/\r\n/
/g; $FORM{'comment'} =~ s/\r|\n/
/g; } ###<-------------------------------------------------------------- ###<--- ログファイル読み込み ###<-------------------------------------------------------------- sub dataread { @FINDTBL = split(/ /,$FORM{'word'}); #検索文字列 @LOG = (); @MAINLOG = () ; @RESLOG = () ; if ( $FORM{'action'} ne 'resdisp' && @FINDTBL < 1 ) { $logfile = $logdir . $year . $mon . ".txt"; $newsw = 0 ; if ( open(IN,"$logfile") ) { @LOG = ; close(IN); foreach $BUF2( @LOG ) { ($targetdate,$no,$ic,$title,$resno,$name,$color,$colorb,$comment,$regdate,$pass,$hst,$ic2,$imgfile) = split(/,/,$BUF2); if ( $resno eq '' ) { push(@MAINLOG,$BUF2) ; } else { push(@RESLOG,$BUF2) ; } } @RESLOG = reverse @RESLOG ; #レスログは古い順に。 } else { $newsw = 1 ; } } else { if ( !(opendir(DIR,"$logdir"))) { &error("ログ保存用フォルダ($logdir)が見つからないか又は開けません"); } @LOGDATA = grep(/\.txt/,readdir(DIR)); closedir(DIR) ; foreach $BUF ( @LOGDATA ) { $logfile = $logdir . $BUF; $newsw = 0 ; if ( open(IN,"$logfile") ) { foreach $BUF2 ( ) { ($targetdate,$no,$ic,$title,$resno,$name,$color,$colorb,$comment,$regdate,$pass,$hst,$ic2,$imgfile) = split(/,/,$BUF2); if ( $FORM{'action'} eq 'find' ) { $found = 0; if ( @FINDTBL > 0 ) { foreach $buf ( @FINDTBL ) { #検索文字列 if ( index($name,$buf) >= 0 ) { $found = 1 ; last ;} if ( index($title,$buf) >= 0 ) { $found = 1 ; last ;} if ( index($comment,$buf) >= 0 ) { $found = 1 ; last ;} } } else { $found = 1 ; } if ( $found == 1) { $found2 = 0 ; foreach $BUF3 ( @FINDLOG ) { ($a,$b,$c) = split(/,/,$BUF3); if ( (substr($targetdate,0,6) == substr($c,0,6)) && ($b == $no || $b == $resno) ) { $found2=1; last ; } } if ( $found2 == 0 ) { if ( $resno eq '' ) { push(@FINDLOG,"$regdate,$no,$targetdate") ; } else { push(@FINDLOG,"$regdate,$resno,$targetdate") ; } } } } else { #▼投稿日を新着件数分配列退避 if ( ($FORM{'rflg'} == 1 && $resno ne '') || ($FORM{'rflg'} == 2 && $resno eq '') ) { $found2 = 0 ; foreach $BUF3 ( @FINDLOG ) { ($a,$b,$c) = split(/,/,$BUF3); if ( (substr($targetdate,0,6) == substr($c,0,6)) && ($b == $no || ($FORM{'rflg'} == 1 && $b == $resno) ) ) { $found2=1; last ; } } if ( $found2 == 0 ) { if ( $FORM{'rflg'} == 1 ) { $dmy = $resno ; } else { $dmy = $no ; } push(@FINDLOG,"$regdate,$dmy,$targetdate") ; } } } } close(IN); } else { $newsw = 1 ; } } @FINDLOG = sort @FINDLOG ; #最新登録順 @FINDLOG = reverse @FINDLOG ; #最新登録順 if ( $FORM{'action'} eq 'resdisp' ) { $i=1; foreach $BUF ( @FINDLOG ) { if ( ($FORM{'rflg'} == 1 && $i <= $sinchaku) || ($FORM{'rflg'} == 2 && $i <= $sinchaku2) ) { push(@sv,$BUF); } else { last ; } $i++; } @FINDLOG = @sv; } foreach $BUF ( @FINDLOG ) { ($regdate,$fno,$ftargetdate) = split(/,/,$BUF); $logfile = $logdir . substr($ftargetdate,0,6) . ".txt" ; if ( open(IN,"$logfile") ) { foreach $BUF2 ( ) { ($targetdate,$no,$ic,$title,$resno,$name,$color,$colorb,$comment,$regdate,$pass,$hst,$ic2,$imgfile) = split(/,/,$BUF2); if ( (substr($ftargetdate,0,6) == substr($targetdate,0,6)) && ($fno == $no || $fno == $resno) ) { if ( $resno eq '' ) { push(@MAINLOG,$BUF2) ; } else { push(@RESLOG,$BUF2) ; } } } close(IN); } } @RESLOG = reverse @RESLOG ; #レスログは古い順に。 } } ###<-------------------------------------------------------------- ###<--- HTMLヘッダー書き出し ###<-------------------------------------------------------------- sub header { print "Content-type: text/html; charset=Shift_JIS\n\n"; print "\n\n"; print "\n"; print "$titlename\n"; print "\n"; $wk = "bgcolor=\"$bgcolor\""; $wk2 = "background=\"$backpicture\""; print "\n"; print "\n"; if ( $FORM{'action'} ne 'view' && $FORM{'action'} ne '') { print "\n"; } if ( $FORM{'action'} ne 'icondisp' && ($icon[0] ne '' || $icon2[0] ne '')) { if ( $kiero == 1 || ($disp_icon == 1 && $onaji == 0 && $icon2[0] ne '')) { #i001213 print "\n"; } #i001213 } if ( $resflg == 1 && $sinchaku != 0 ) { print "\n"; } if ( $sinchaku2 != 0 ) { print "\n"; } print "\n"; print "\n"; print "\n"; print "
 \n"; print " 説明 最新レス 最新投稿 
 "; if ( $FORM{'action'} ne 'resdisp' ) { print ""; print ""; print "
"; print "No.\n"; print "Pass\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
"; } print "
\n" if ( $FORM{'action'} ne 'resdisp' ) ; if ( $findsw == 1) { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n" if ( $FORM{'action'} ne 'resdisp' ) ; print "\n"; print "\n"; print "
\n"; print "
\n"; } print "\n" if ( $FORM{'action'} eq 'resdisp' ) ; print "
\n"; if ( $titlelogo ) { print "$titlelogo
\n"; } else { print "$titlename
\n"; } if ( $FORM{'proc'} ne 'write' ) { print $HEAD_COMMENT if ( $HEAD_COMMENT ) ; if ( $minnade == 1 ) { print "
\n"; if ( $minnade_gif ) { print "\n"; } else { print "\n"; } print "\n"; print "\n"; print "
"; } } print "
\n"; } ###<-------------------------------------------------------------- ###<--- HTMLフッダー書き出し ###<-------------------------------------------------------------- sub footer { if ( $FORM{'action'} eq 'view' || $FORM{'action'} eq '' || $FORM{'action'} eq 'move') { if ( $dlsw == 1 ) { print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
全て保存\n"; print "
拡張子はhtm。
"; print "
"; } print "


\n"; } #<<< ↓消さないで下さい print "

\n"; print "TackynoteSP Ver0.6

\n"; print "\n"; } ###<-------------------------------------------------------------- ###<--- 入力フォーム ###<-------------------------------------------------------------- sub forminput { print "
\n"; if ( $FORM{'proc'} eq "write" ) { print "
\n"; print "\n"; $c_pass = $FORM{'pass'} ; } else { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $yy = substr($targetdate,0,4); $mm = substr($targetdate,4,2); $dd = substr($targetdate,6,2); print "\n"; print "\n"; print "\n"; } print "\n"; if ( $FORM{'proc'} eq "write" ) { print "\n"; } else { print "\n"; } if ( ( $FORM{'proc'} ne "write" && $c_resno ne '' ) || $minnade == 1 ) { print "\n"; print "\n"; } #背景色 if ( $colb_use != 1 && $FORM{'action'} ne 'res' && $c_resno eq '') { print "\n"; print "\n"; } #文字色 print "\n"; print "\n"; if ( $FORM{'proc'} ne "write" && $c_resno ne '' && $minnade == 0 ) { } else { if ( $titleflg == 1 ) { print "\n"; print "\n"; } if ( $icon[0] ne '' ) { print "\n"; print "\n"; } #日記部にアイコン表示&カレンダーアイコンとは異なるアイコンを表示する場合i001109 if ( $disp_icon == 1 && $onaji == 0 ) { print "\n"; print "\n"; } } print "\n"; } else { print "\n"; } print "\n"; print "\n"; #■新規投稿時のみファイルアップロード可とする if ( $UpFolder && $FORM{'action'} ne 'view' && $c_resno eq '' ) { print "\n"; print "\n"; print "\n"; } print "
 年\n"; print " 月\n"; print " 日の日記を書きます。

\n"; print "$yy年$mm月$dd日の日記を修正します。

\n"; print "お名前
背景色\n"; foreach (0 .. $#COLORS_B) { if ( $c_colorb == $_ || ($c_colorb eq '' && $_ == 0)) { $dmy = "checked"; } else { $dmy = "" ; } print "\n"; print "\n"; } print "
文字色\n"; foreach (0 .. $#COLORS_F) { if ( $c_color == $_ || ($c_color eq '' && $_ == 0)) { $dmy = "checked"; } else { $dmy = "" ; } print "\n"; print "\n"; } print "
\n"; print "タイトル
\n"; print "アイコン\n"; print "
\n"; print "日記に表\示するアイコン\n"; print "
\n"; print "メッセージ\n"; if ( $FORM{'proc'} ne "write" && $c_resno ne '' ) { if ( $res_text == 0 ) { print "\n"; } else { print "\n"; } print "
\n"; print "パスワード
\n"; print "アップ"; print "\n"; if ( $c_upload ) { print "
▲現在【 $c_upload 】が設定されています。
そのままで良い場合は何も入力しないで下さい\n"; if ( $imgfile =~ /gif|jpg|png/i ) {print "
\n"; } } print "
 ▲アップロードファイルは最大" . int($maxdatasz / 1024) . "kb迄ですのでご注意下さい。
\n"; print "幅:$MaxWidth" . "Pixel、高さ:$MaxHeightを超える場合は画像は縮小表\示されます
\n"; print "▼アップロード可能\なファイル形式
【 "; foreach ( 0..$#FMT){ if ( $_ == $#FMT ) { print $FMT[$_] ; } else { print $FMT[$_] . " , " ; } } print " 】
 \n"; if ( $FORM{'proc'} eq "write" ) { print ""; } elsif ( $FORM{'proc'} eq "edit" ) { print ""; } else { print ""; } print "
\n"; print "
\n"; } ###<-------------------------------------------------------------- ###<--- ログ表示 ###<-------------------------------------------------------------- sub view { &dataread ; #ログ読み込み if ( $FORM{'no'} eq '' ) { print "\n"; } if ( $FORM{'action'} ne 'resdisp' ) { @SORTLOG = sort { #u010515,u010618 (split (/,/, $a, 2))[0] <=> (split (/,/, $b, 2))[0] || (split (/,/, $a, 3))[1] <=> (split (/,/, $b, 3))[1] } @MAINLOG ; if ( $viewsort == 2 && $FORM{'action'} ne 'download' ) { #昇順の場合 u001109 @SORTLOG = reverse @SORTLOG ; } } else { @SORTLOG = @MAINLOG ; } print "\n"; $sw = 0 ; $rcnt=1; if ( $FORM{'action'} eq 'resdisp') { if ( $FORM{'rflg'} == 1 ) { $dmy = "レス"; $dispcnt = $sinchaku ; } else { $dmy = "投稿"; $dispcnt = $sinchaku2 ;} print "
最新$dmyを $dispcnt件 表\示しています
\n"; } if ( $FORM{'action'} eq 'download' || $FORM{'action'} eq 'resdisp' ) { $sw = 1 ; } #i001216 else { print "$year/$mon
\n" ; print "
\n"; if ( $monthview eq 'week' ) { if ( $year != $syear || $mon != $smonth ) { $weekpoint = 1 ;} if ( $FORM{'week'} ne '' && $FORM{'week'} != 9 ) { $weekpoint = $FORM{'week'} ; } for ( 1..$weekcnt ) { if ( $weekpoint != $_ || $FORM{'no'} ne '' || $FORM{'week'} == 9 ) { print "
$_週目の日記  "; } else { print "$_週目の日記  "; } } if ( $FORM{'week'} != 9 ) { print "1ヶ月分の日記  "; } else { print "1ヶ月分の日記  "; } print "
\n"; } } if ( $FORM{'week'} == 9 ) { $weekstart[$FORM{'week'}] = 1 ; $weekend[$FORM{'week'}] = 31 ; } foreach $buf ( @SORTLOG ) { ($targetdate,$no,$ic,$title,$resno,$name,$color,$colorb,$comment,$regdate,$ps,$hst,$ic2,$imgfile) = split(/,/,$buf); $yy = substr($targetdate,0,4); $mm = substr($targetdate,4,2); $dd = substr($targetdate,6,2); $imgfile =~ s/\n//g; if ( $FORM{'no'} == $no || $FORM{'all'} == 1 || $FORM{'action'} eq 'resdisp' || $FORM{'action'} eq 'find' || ($FORM{'action'} eq 'download' && $monthview eq 'no' && $yy == $year && $mm == $mon) || #i001109 ($monthview ne 'no' && $yy == $year && $mm == $mon) || ( $FORM{'no'} eq '' && $monthview ne 'yes' && $yy == $syear && $mm == $smonth && $dd == $sday ) || ( $FORM{'no'} ne '' && $zurazura == 1 && $yy == $year && $mm == $mon && $dd == $day ) ) { # ( $FORM{'no'} ne '' && $monthview eq 'no' && $zurazura == 1 && $yy == $year && $mm == $mon && $dd == $day ) ) { if ( $FORM{'no'} == $no || $FORM{'all'} == 1 || $FORM{'action'} eq 'resdisp' || $FORM{'action'} eq 'find' ) { } else { if ( $FORM{'week'} ne '' ) { if ( $dd >= $weekstart[$FORM{'week'}] && $dd <= $weekend[$FORM{'week'}] ) { } else { next ; } } else { if ( $monthview eq 'week' && $kiero == 1 ) { #u020220 ## if ( $FORM{'no'} eq '' ) { if ( $yy == $syear && $mm == $smonth ) { if ( $dd >= $weekstart[$weekpoint] && $dd <= $weekend[$weekpoint] ) { } else { next ; } } else { if ( $dd >= $weekstart[1] && $dd <= $weekend[1] ) { } else { next ; } } ## } else { ## if ( $yy == $year && $mm == $mon && $dd == $day ) { ## } else { next ; } ## } } } } $title =~ s/&knm/\,/g; $comment =~ s/&knm/\,/g; if ( $awaseru == 1 && $colb_use != 1 ) { $msg_celltxcolor2 = $COLORS_F[$color] ; #文字色u020219 $msg_cellbgcolor2 = $COLORS_B[$colorb] ; #背景色 } if ( $colb_use != 1 ) { $colorf = $COLORS_F[$color] ; #文字色u020219 $colorb = $COLORS_B[$colorb] ; #背景色 } else { $colorf = $COLORS_F[0] ; #文字色 $colorb = $COLORS_B[0] ; #背景色 } if ( substr($mm,0,1) == 0 ) { $mm =~ s/0/ /; } $dd = substr($targetdate,6,2); if ( substr($dd,0,1) == 0 ) { $dd =~ s/0/ /; } if ( $sw == 0 && !($FORM{'all'}) ) { #u001216 $sw = 1 ; } print "

\n"; if ( $FORM{'no'} == $no ) { print "\n"; } $wek = &week_get($yy,$mm); #表示対応年月の1日の曜日を算出 for ( $i = 1 ; $i < $dd ; $i++ ) { if ( $wek == 6 ) { $wek = 0 ; } else { $wek++ ; } } if ( $msg_bordercolor2 ) { print "\n"; print "
"; $wid = "100%"; } else { $wid = $tbl_sz ; } print "\n"; print "
"; # $timedisp=1:「日記の日付:○」・「投稿日付:○」 # $timedisp=2:「日記の日付:○」・「投稿日付:×」 # $timedisp=3:「日記の日付:×」・「投稿日付:○」 # $timedisp=4:「日記の日付:×」・「投稿日付:×」 print "$yy年$mm月$dd日 ($week[$wek])\n" if ( $timedisp == 1 || $timedisp == 2 ) ; print "No.[$no]"; print "\n"; print "
\n"; print "
\n" if ( $simaru ) ; print "
\n"; if ( $simaru ) { print "\n"; print "\n"; print "
"; } print "\n"; if ( $title || $minnade == 1 ) { print "\n"; } print "\n"; } print "
"; print "\n"; if ( $title ) { print "$title\n" ; } print "   ...($name)" if ( $minnade == 1 && $name ) ; print "
\n"; print "\n"; $comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1こちら<\/a>/g; print ""; if ( $disp_icon == 1 && $FORM{'action'} ne 'download') { print "\n"; } print "
"; #日記部にアイコン表示&カレンダーアイコンと同じアイコンを表示する場合i001109 if ( $onaji == 1 ) { if ( $icon_w != 0 ) { $w = " width=$icon_w" ; } else { $w = ""; } if ( $icon_h != 0 ) { $h = " height=$icon_h" ; } else { $h = ""; } if ( $icon[0] eq '' ) { if ( $img_gif ) { print "\n" ; } } else { print "\"$iconnm[$ic]\"\n" ; } } elsif ( $ic2 ne '' ) { #u001114 if ( $icon2_w[$ic2] != 0 ) { $w = " width=$icon2_w[$ic2]" ; } else { $w = ""; } if ( $icon2_h[$ic2] != 0 ) { $h = " height=$icon2_h[$ic2]" ; } else { $h = ""; } print "\"$iconnm2[$ic2]\"\n" ; } print ""; print "
\n"; #■画像表示 if ( $imgfile && $FORM{'action'} ne 'download') { if ( $maware == 0 ) { if ( $point == 1 ) { $dmy = "align=left"; } elsif ( $point == 3 ) { $dmy = "align=right"; } else { $dmy = "align=center"; } print "
"; $dmy ="" ; } else { if ( $point == 1 ) { $dmy = "align=left"; } elsif ( $point == 3 ) { $dmy = "align=right"; } else { $dmy = ""; } } if ( $imgfile =~ /gif|jpg|png/i ) { if ( $sizeflg == 1 ) { ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $uptime, $mtime, $ctime, $blksize, $blocks) = stat($imgfile); local ($file) = $imgfile =~ /([^\/]+)$/; $size = int ((-s "$UpFolder$file") / 1024); $size = 1 if ( $size == 0 ) ; } if ( $sizeflg == 1 ) { $dmy3 = "alt=($size" . "kb)" ; } else { $dmy3 = ""; } if ( $imgfile =~ /gif/i ) { ($W,$H) = &GIFSizeGet("$UpFolder$imgfile") ; } if ( $imgfile =~ /jpg/i ) { ($W,$H) = &JPGSizeGet("$UpFolder$imgfile") ; } if ( $imgfile =~ /png/i ) { ($W,$H) = &PNGSizeGet("$UpFolder$imgfile") ; } # 画像表示縮小 $WS = $W ; $HS = $H ; if ($W > $MaxWidth || $H > $MaxHeight) { $W2 = $MaxWidth / $W; $H2 = $MaxHeight / $H; if ($W2 < $H2) { $sv = $W2; } else { $sv = $H2; } $W = int ($W * $sv); $H = int ($H * $sv); } if ( $imglink == 2 ) { print "\n"; } if ( $imglink == 1 ) { #エンコード $ec = $imgfile; $ec =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print " EOM print ""; print "\n"; } else { print "\n"; } } else { print "$imgfile\n"; } if ( $sizeflg == 1 ) { ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $uptime, $mtime, $ctime, $blksize, $blocks) = stat($imgfile); local ($file) = $imgfile =~ /([^\/]+)$/; $size = int ((-s "$UpFolder$file") / 1024); $size = 1 if ( $size == 0 ) ; if ( $maware == 0 ) { print "
( $size" ."kb )

\n"; } } if ( $maware == 1 || !($imgfile =~ /gif|jpg|png/i) ) { print "$comment"; } if ( $maware == 0 ) { print "
\n"; } if ( $maware == 0 ) { print "
\n"; } } if ( $maware == 0 || !($imgfile && $FORM{'action'} ne 'download') ) { print "$comment"; } print "
\n"; $cnt = 0 ; foreach $buf ( @RESLOG ) { ($targetdate2,$no2,$ic,$title,$resno,$name,$color,$colorb2,$comment,$regdate,$pass,$hst,$ic2,$imgfile) = split(/,/,$buf); if ( (substr($targetdate,0,6) == substr($targetdate2,0,6)) && ($no == $resno) ) { $title =~ s/&knm/\,/g; $comment =~ s/&knm/\,/g; if ( $cnt == 0 ) { print "

"; print "\n"; } print "\n"; print "$name>"; $comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1こちら<\/a>/g; print "$comment\n"; print "
..$regdate ($no2)
"; print "
\n"; $cnt++ ; } } if ( $cnt != 0 ) { print "
\n"; } print "
\n" if ( $simaru ) ; if ( $resflg == 1 && $FORM{'action'} ne 'download' ) { #u001216 print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
name    color   pass     
"; print "\n"; print "\n"; print "\n"; print "
msg   \n"; if ( $res_text == 0 ) { print "\n"; } else { print "\n"; } print " 
\n"; print "
\n"; print "
\n"; print "\n" ; $rcnt++ ; if ( $FORM{'action'} eq 'resdisp' && $rcnt > $dispcnt ) { last ; } } } if ( @SORTLOG < 1 && $FORM{'action'} eq 'view') { if ( substr($mon,0,1) == 0 ) { $mon =~ s/0/ /; } print "
$year年$mon月の日記は書いていません。
\n"; #i001105 $sw == 1 ; } print "
\n"; } ###<------------------------------------------------------------- ###<--- カレンダー表示部 ###<-------------------------------------------------------------- sub calender { #春分・秋分の日算出 local($haru,$aki); $haru = "03" . int(20.8431 + 0.242194 * ($year - 1980) - int(($year - 1980) / 4)); push(@holiday,$haru); $aki = "09" . int(23.248 + 0.242194 * ($year - 1980) - int(($year - 1980) / 4)); push(@holiday,$aki); &dataread ; #ログ読み込み print "
\n"; $sday2 = &week_get($year,$mon); #表示対象年月の1日の曜日を算出 if ( substr($mon,0,1) == 0 ) { $wmon = $mon ; $wmon =~ s/0/ /; } else { $wmon = $mon ; } print "\n"; #▼年月移動部分 print "\n"; print "\n"; if ( $kiero == 1 ) { print "\n"; } print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
 
\n"; print "
\n"; print "\n"; print "\n"; for ($j = 0 ; $j < 7 ; $j++ ) { print "\n"; } print "\n"; #カレンダーを表示 $j = 0 ; #曜日=日曜日 $editsw = 0 ; $cnt_monday = 0 ; $weekcnt = 0 ; for ( $i = 1; $i <= $cdays[$mon] ;){ if ( $sday2 == 0 || $j == 0) { print "\n"; $weekcnt++; $weekstart[$weekcnt] = $i ; #週の初日を退避 } if ( $j >= $sday2 || $editsw == 1) { #$sday2=対象月1日の曜日 $editsw = 1 ; $ii = sprintf("%02d",$i); $v = "$mon$ii"; $k = 0; $hol = 0 ; foreach ( @holiday ) { if ( $v == $holiday[$k] ) { if ( $year >= 2000 && ( $v == '0115' || $v == '1010' ) ) { } else { $hol = 1 ; } last ; } $k++; } #成人の日算出 if ( $year >= 2000 && $mon == 1 && $sday2 == 1 ) { #1月で「月曜日」の場合 $cnt_monday++ ; if ( $cnt_monday == 2 ) { $hol = 1 ; } } #体育の日算出 if ( $year >= 2000 && $mon == 10 && $sday2 == 1 ) { #1月で「月曜日」の場合 $cnt_monday++ ; if ( $cnt_monday == 2 ) { $hol = 1 ; } } #「日」 if ( $syear == $year && $smonth == $mon && $sday == $i ) { $bg = "bgcolor=\"$color_today\""; $weekpoint = $weekcnt ; } else { $bg = "bgcolor=\"$calcolor\""; } print "\n"; $sday2++; if ( $sday2 == 7 || $i == $cdays[$mon]) { if ( $i == $cdays[$mon] ) { for ( ; $sday2 < 7 ; $sday2++ ) { print "\n"; } } print "\n"; $weekend[$weekcnt] = $i ; #週の最終日を退避 $sday2 = 0 ; } $i++; $j=99; } else { print "\n"; $j++; } } print "
$week[$j]
"; if ( $set_font ) { $fontdmy = "face=$set_font"; } else { $fontdmy = ""; } if ( $hol == 1 || $sday2 == 0 || $svhol == 1) { if ( $hol == 1 || $svhol == 1 ) { print ""; } else { print ""; } } else { if ( $sday2 == 6 ) { print ""; } else { print ""; } } if ( $sw == 1 ) { print "$i"; } else { print "$i"; } print "\n"; #祝日で日曜日の場合、翌日が振替祝日の為、退避 if ( $hol == 1 && $sday2 == 0 ) { $svhol = 1 ; } else { $svhol = 0 ; } #日記帳ログを検索 $set = 0 ; foreach $buf ( @MAINLOG ) { ($targetdate,$no,$ic,$title,$resno,$name,$color,$colorb,$comment,$regdate,$pass,$hst,$ic2,$imgfile) = split(/,/,$buf); $yy = substr($targetdate,0,4); $mm = substr($targetdate,4,2); $dd = substr($targetdate,6,2); if ( $year == $yy && $mon == $mm && $ii == $dd && ( $zurazura == 0 || ( $zurazura == 1 && $set == 0 ) ) ) { $set = 1 ; print "
\n"; if ( $icon_w != 0 ) { $w = " width=$icon_w" ; } else { $w = ""; } if ( $icon_h != 0 ) { $h = " height=$icon_h" ; } else { $h = ""; } if ( $icon[0] eq '' ) { if ( $img_gif ) { print "\n" ; } else { print "■\n" ; } } else { print "\n" ; } } } print "
 
 
\n"; print "
\n"; print "
\n"; #前月・次月スクロールボタン print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; if ( $mon == 1 ) { $wmon1 = 12 ; $wyear1 = $year - 1 ; } else { $wmon1 = $mon - 1 ; $wyear1 = $year ; } print "\n"; print "\n"; if ( $back_gif ) { print "\n"; } else { print "\n"; } print " 
\n"; print "\n"; if ( $mon == 12 ) { $wmon2 = 1 ; $wyear2 = $year + 1 ; } else { $wmon2 = $mon + 1 ; $wyear2 = $year ; } print "\n"; print "\n"; if ( $next_gif ) { print "\n"; } else { print "\n"; } print "
\n"; print "

\n"; print "
\n"; } ###<-------------------------------------------------------------- ###<--- ログ出力 ###<-------------------------------------------------------------- sub regist { # ホスト名を取得 $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq "$addr") { ($p1,$p2,$p3,$p4) = split(/\./,$addr); $temp = pack("C4",$p1,$p2,$p3,$p4); $host = gethostbyaddr("$temp", 2); if ($host eq "") { $host = $addr; } } #掲示板荒らし対策 foreach $buf(@DANGER_LIST){ if ( $buf ) { # パターンマッチを変換 $buf=~ s/\./\\./g; $buf=~ s/\?/\./g; $buf=~ s/\*/\.\*/g; if($host =~ /$buf/gi){ &error("\申\し\訳ありません。
あなたのプロバイダーからは投稿できませんでした. "); } } } if ( $Maxword ne '' && (length($FORM{'comment'}) > $Maxword)) { &error("メッセージは$Maxword文字までしか登録出来ません。"); } if ( $FORM{'resno'} ne '' && $FORM{'name'} eq "") { &error("お名前を入力して下さい。"); } if ( $FORM{'comment'} eq "") { &error("メッセージは省略出来ません。"); } &filelock ; #ファイルロック &dataread ; #ログ読み込み ($targetdate,$delno,$ic,$title,$resno,$name,$color,$colorb,$comment,$ps,$regdate,$hst,$ic2,$imgfile) = split(/,/,$LOG[0]); if ( $name eq $FORM{'name'} && $comment eq $FORM{'comment'} ) { &fileunlock ; &error("二重投稿は禁止しています。") ; } $dcnt = @LOG; $imonth = sprintf("%02d",$FORM{'month'}); $iday = sprintf("%02d",$FORM{'day'}); if ( $dcnt < 1 ) { $no = 1; #1件目 } else { ($dummy,$no,$dummy) = split(/,/,$LOG[0]); #最新記事No取得 $no++; } # ファイル添付処理 $ImgFile = ""; if($upfname =~ /http/gi) { $ImgFile = $upfname ; } else { if ($upfname) { &fileupload; } } # パスワードの暗号化(crypt関数使用)) if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); } else { $pass = '' ; } unshift(@LOG,"$FORM{'year'}$imonth$iday,$no,$FORM{'icon'},$FORM{'title'},$FORM{'resno'},$FORM{'name'},$FORM{'color'},$FORM{'colorb'},$FORM{'comment'},$sysdate,$pass,$host,$FORM{'icon2'},$ImgFile\n"); if ( !(open(OUT,">$logfile"))) { &fileunlock ; &error("ログファイル($logfile)のオープンに失敗しました"); } print OUT @LOG; close(OUT); if ( $newsw == 1 ) { # パーミッション変更 chmod(0666,"$logfile"); } #▼Sendmail使用&レス記事のみ if ( $sendmail && $FORM{'resno'} ) { &SMail ; } #COOKIE設定 &cookieset ; &fileunlock ; #ファイルロック解除 if ( $FORM{'resno'} ) { $rno = $FORM{'resno'} ; } else { $rno = $no ; } if ( $FORM{'resno'} eq '' ) { &header ; #<<
\n"; print "正常に登録されました。


\n"; print "[
投稿内容を確認する]\n\n"; print "




\n"; &footer ; #<<\n\n"; } } exit; } ###<-------------------------------------------------------------- ###<--- メンテナンスモード ###<-------------------------------------------------------------- sub Maintenance { if ( $FORM{'no'} eq "") { &error("メンテナンス対象の記事Noを指定して下さい。"); } if ( $FORM{'pass'} eq "") { &error("パスワードを入力して下さい。"); } &dataread ; #ログ読み込み $found = 0 ; foreach $buf ( @LOG ) { ($targetdate,$n,$ic,$title,$resno,$name,$color,$colorb,$comment,$regdate,$pass,$hst,$ic2,$imgfile) = split(/,/,$buf); if ( $FORM{'no'} eq $n ) { if ($FORM{'pass'} ne $password && (&pass_dec($pass))) { &error("パスワードが違います。"); } $found = 1 ; if ( $FORM{'proc'} eq "delete" ) { $FORM{'year'} = substr($targetdate,0,4); $FORM{'month'} = substr($targetdate,4,2); &update ; exit; } &header ; $title =~ s/&knm/\,/g; $comment =~ s/&knm/\,/g; $c_ic = $ic ; $c_ic2 = $ic2 ; $c_title = $title ; $c_name = $name ; $c_color = $color ; $c_colorb=$colorb ; $c_resno = $resno ; $c_pass = $FORM{'pass'} ; $c_comment = $comment ; $c_comment =~ s/\/\n/g; local ($img) = $imgfile =~ /([^\/]+)$/; $img = $UpFolder .$img; if($img) { $c_upload = $img ; } &forminput ; last; } } if ( $found == 0 ) { &error("該当する記事Noのデータは存在していません。"); } &footer ; exit; } ###<-------------------------------------------------------------- ###<--- ログファイル更新 ###<-------------------------------------------------------------- sub update { if ( $FORM{'action'} eq 'edit' && $FORM{'comment'} eq "") { &error("何か入力しないとダメっすよ〜"); } $imonth = sprintf("%02d",$FORM{'month'}); $iday = sprintf("%02d",$FORM{'day'}); &filelock ; #ファイルロック &dataread ; #ログ読み込み @new = (); foreach ( @LOG ) { ($targetdate,$n,$ic,$title,$resno,$name,$color,$colorb,$comment,$regdate,$pass,$hst,$ic2,$imgfile) = split(/,/,$_); if ( $FORM{'no'} eq $n) { #<<<メンテ対象者の場合 $no=$n; $imgfile =~ s/\n//; #■アップロードファイルの削除 local ($img) = $imgfile =~ /([^\/]+)$/; $img = $UpFolder .$img; if ( ($upfname || $FORM{'proc'} eq 'delete') && $img !~ /http/gi && $img && (-e $img)) { unlink($img); } if ( $FORM{'proc'} eq "edit" ) { # ファイル添付処理 $ImgFile = ""; if($upfname =~ /http/gi) { $ImgFile = $FORM{'fileupload'} ; } elsif ($upfname) { &fileupload; } else { $ImgFile = $imgfile ; } push(@new,"$FORM{'year'}$imonth$iday,$n,$FORM{'icon'},$FORM{'title'},$resno,$FORM{'name'},$FORM{'color'},$FORM{'colorb'},$FORM{'comment'},$regdate,$pass,$hst,$FORM{'icon2'},$ImgFile\n"); } } else { push(@new,"$_"); #<<<そのまま出力 } } if ( !(open(OUT,">$logfile"))) { &fileunlock ; &error("ログファイル($logfile)のオープンに失敗しました"); } print OUT @new; close(OUT); #COOKIE設定 &cookieset ; &fileunlock ; #ファイルロック解除 &header ; #<<
\n"; if ( $FORM{'proc'} eq "edit" ) { print "正常に更新されました。


\n"; print "[修正内容を確認する]\n\n"; } else { print "正常に削除されました。


\n"; print "[戻る]\n\n"; } print "




\n"; &footer ; #<<= 2){ if (($_[0] % 4) == 0){ if (($_[0] %100) != 0){ $cdays[2] = 29; }elsif (($_[0] % 400) == 0){ $cdays[2] = 29; } } } for ($i = 1; $i < $_[1] ;$i++){ #1月〜対象月前月迄の日数を求める $days2 += $cdays[$i]; } $days += $days2; $youbi = $days % 7; #対象月1日の曜日が求まる return $youbi ; } ###<-------------------------------------------------------------- ###<--- エラー処理 ###<-------------------------------------------------------------- sub error { print "Content-type: text/html; charset=Shift_JIS\n\n"; print "\n\n"; print "\n"; print "$titlename\n"; print "\n"; $wk = "bgcolor=\"$bgcolor\""; $wk2 = "background=\"$backpicture\""; print "\n"; print "$_[0]"; &footer; exit; } ###<-------------------------------------------------------------- ###<--- Information(アイコン一覧) ###<-------------------------------------------------------------- sub icondisp { &header ; #<<\n"; print <<"EOM";
■使い方 No及びパスワードを入力すると投稿記事の修正・削除が出来ます。
EOM if ( $minnade == 0 ) { print "「日記を書く」は管理人のみの機能\となります。\n"; } else { print "この日記はみんなで書く事が可能\です。"; } print <<"EOM";
■検索方法 検索は「名前」「タイトル」「メッセージ」に対して行います。 検索キーワードを「半角スペース」で区切ると複数検索が可能\です(OR検索)
■アイコン EOM if ( $kiero == 1 && $icon[0] ne '') { print "カレンダーアイコン
\n"; print "\n"; $i = 0 ; $j = 0 ; while ( 1 ) { print "\n"; for ( $ln = 1 ; $j <= $#icon && $ln <= $icon_line ; ) { print "\n"; print "\n"; $j++ ; $ln++ ; } if ( $j > $#icon ) { if ( $ln < $icon_line ) { for ( ; $ln <= $icon_line ; ) { print "\n"; print "\n"; $ln++ ; } } print "\n"; last ; } print "\n"; $i++; } print "
$iconnm[$j]  
\n"; } if ( $disp_icon == 1 && $onaji == 0 && $icon2[0] ne '' ) { print "
▼日記のアイコン
\n"; print "\n"; $i = 0 ; $j = 0 ; while ( 1 ) { print "\n"; for ( $ln = 1 ; $j <= $#icon2 && $ln <= $icon_line ; ) { print "\n"; print "\n"; $j++ ; $ln++ ; } if ( $j > $#icon2 ) { if ( $ln < $icon_line ) { for ( ; $ln <= $icon_line ; ) { print "\n"; print "\n"; $ln++ ; } } print "\n"; last ; } print "\n"; $i++; } print "
$iconnm2[$j]  
\n"; } print "
\n"; print "



"; &footer ; #<<$lockfile"); close(LOCK); return; } } &error("只今他の方が書き込み中です。ブラウザの「戻る」で戻って再度登録を行って下さい。"); } ###<-------------------------------------------------------------- ###<--- ファイルロック解除 ###<-------------------------------------------------------------- sub fileunlock { if (-e $lockfile) { unlink($lockfile); } } ###<------------------------------------------------------------- ###<--- クッキー取得 ###<-------------------------------------------------------------- sub cookieget { $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'tackynotesp'}); foreach $pair (@pairs) { ($name, $value) = split(/\!/, $pair); $COOKIE{$name} = $value; } $c_name = $COOKIE{'nm'} ; $c_color = $COOKIE{'cl'} ; $c_pass = $COOKIE{'ps'} ; } ###<------------------------------------------------------------- ###<--- クッキー設定 ###<-------------------------------------------------------------- sub cookieset { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) =gmtime(time + 30*24*60*60); $yearg += 1900 ; if ($secg < 10) { $secg = "0$secg"; } if ($ming < 10) { $ming = "0$ming"; } if ($hourg < 10) { $hourg = "0$hourg"; } if ($mdayg < 10) { $mdayg = "0$mdayg"; } $mong = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg]; $date_gmt = "$youbi, $mdayg\-$mong\-$yearg $hourg:$ming:$secg GMT"; $cook="nm\!$FORM{'name'},cl\!$FORM{'color'},ps\!$FORM{'pass'}"; print "Set-Cookie: tackynotesp=$cook; expires=$date_gmt\n"; } ###<------------------------------------------------------------- ###<--- パスワード暗号化 ###<-------------------------------------------------------------- sub pass_enc { if ( $ango == 1 ) { $pass = crypt($_[0], $_[0]); } else { $pass = $_[0]; } } ###<------------------------------------------------------------- ###<--- パスワードチェック ###<-------------------------------------------------------------- sub pass_dec { if ( $ango == 1 ) { if ($_[0] ne '' && ( crypt($FORM{'pass'}, $_[0]) eq $_[0]) ) { return 0 ; } } else { if ($FORM{'pass'} eq $_[0]) { return 0 ; } } return 1; } ###<------------------------------------------------------------- ###<--- ログダウンロード ###<-------------------------------------------------------------- sub download { print "Content-type: text/download\n\n"; print "$titlename"; $wk = "bgcolor=\"$bgcolor\""; print "\n"; &view ; print "\n"; exit; } ###<-------------------------------------------------------------- ###<--- SendMail ###<-------------------------------------------------------------- sub SMail { $mailbuf = ""; $cv_ttl = $titlename; if ( $hiho == 1 ) { &jcode'convert(*cv_ttl,'euc'); open(MAIL,"| $sendmail -s \"$cv_ttl\" -f $smail_address $smail_address ") || &error("Sendmail Error!!"); } else { &jcode'convert(*ttl,'jis'); open(MAIL,"| $sendmail -t") || &error("Sendmail Error!!"); $mailbuf = "To: $smail_address\n"; $mailbuf .= "From: $smail_address\n"; $mailbuf .= "Subject: $cv_ttl\n"; $mailbuf .= "Content-Transfer-Encoding: 7bit\n"; $mailbuf .= "Content-type: text/plain\n"; $mailbuf .= "\n\n"; } $mailbuf .= "============================================================\n"; $mailbuf .= "■---『$titlename』に返信がありました\n"; $mailbuf .= "============================================================\n"; $mailbuf .= "▼投稿日時:\n"; $mailbuf .= "$sysdate\n\n"; $mailbuf .= "▼返信のあった日記の日付\n"; $mailbuf .= "$FORM{'year'}年$imonth月$iday日分\n\n"; $mailbuf .= "▼お名前\n"; $mailbuf .= "$FORM{'name'}\n\n"; $mailbuf .= "▼パスワード\n"; $mailbuf .= "$FORM{'pass'}\n\n"; $mailbuf .= "▼コメント\n"; $mailbuf .= "$FORM{'comment'}\n\n"; $mailbuf .= "▼リモートホスト\n"; $mailbuf .= "$host\n\n"; $mailbuf .= "============================================================\n"; #漢字コードJIS変換&改行コードLF変換。 $mailbuf =~ s/\r\n/\n/g; $mailbuf =~ s/\r/\n/g; $mailbuf =~ s/
/\n/g; &jcode'convert(*mailbuf,'jis'); print MAIL $mailbuf ; close(MAIL); } ###<-------------------------------------------------------------- ###<--- 画像アップロード処理 ###<-------------------------------------------------------------- sub fileupload { if ( $UpFolder eq '' ) { $ImgFile = "" ; return ; } $upfname =~ s/\,/,/g; $ImgFile = $UpFolder . $upfname ; if ( -e $ImgFile ) { &error("同じファイル名のファイルが既に存在しています。"); } $ok=0; $type =$upfname; $type =~ s/\r//g; $type =~ s/\n//g; foreach $buf(@FMT){ if ( $buf ) { if($type =~ /$buf/i){ $ok=1; $type = ".$buf"; } } } if ($ok == 0 ) { &fileunlock ; &error("このファイル形式はアップロード出来ません。"); } # マックバイナリ対策 if ($mac) { $len = substr($FORM{'fileupload'},83,4); $len = unpack("%N",$length); $FORM{'fileupload'} = substr($FORM{'fileupload'},128,$len); } # 添付データを書き込み if ( !(open(OUT,">$ImgFile"))) { &fileunlock ; &error("画像のアップロードに失敗しました"); } binmode(OUT); binmode(STDOUT); print OUT $FORM{'fileupload'}; close(OUT); chmod (0666,$ImgFile); $ImgFile = $upfname; } ###<-------------------------------------------------------------- ###<--- GIF画像サイズ取得 ###<-------------------------------------------------------------- sub GIFSizeGet { open(GIF,$_[0]) || return (0,0); seek(GIF,6,0); read(GIF,$size,4); close(GIF); return ( unpack("v",substr($size,0,2)) , unpack("v",substr($size,2,2)) ) ; } ###<-------------------------------------------------------------- ###<--- PNG画像サイズ取得 ###<-------------------------------------------------------------- sub PNGSizeGet { open(PNG,$_[0]) || return (0,0); binmode(PNG); seek(PNG,16,0); read(PNG,$size,8); close(PNG); return ( hex(unpack("H*",substr($size,0,4))) , hex(unpack("H*",substr($size,4,4))) ) ; } ###<-------------------------------------------------------------- ###<--- JPG画像サイズ取得 ###<-------------------------------------------------------------- sub JPGSizeGet { open(JPG, $_[0]) || return (0,0); binmode JPG; read(JPG,$t,2); while (1) { read(JPG,$size,4); ($a, $b, $c) = unpack("a a n", $size); if ($a ne "\xFF") { $W = $H = 0; last; } elsif ((ord($b) >= 0xC0) && (ord($b) <= 0xC3)) { read(JPG, $size, 5); ($H, $W) = unpack("xnn", $size); last; }else {read(JPG, $size, ($c - 2));} } close(JPG); return ($W, $H); }