#!/usr/bin/perl # スクリプト改造/配布 # Pastel Clover Diary ver1.04 at2003.06.09 # Copyright(C) 2000-2003 you. All Right Reserved # URL http://pastel.oheya.jp/ # Mail pastel@oheya.jp # # スクリプト製作元サイト様 # STYLE DIARY ver0.14b at2003.05.06 Style Diary Series. # Copyright(C) 2001-2003 CGI-Style Net. # URL http://cgistyle.net/ # Mail webmaster@cgistyle.net # #【 注意 】 # 1.このスクリプトの著作権は「CGI-Style Net.」にあります # また記事表示部など改造部分に関しての著作権は「Pastel」にあります # 2.このスクリプトはフリーソフトです #   このスプリクトは商用サイト、非商用サイトの区別なく利用できますが、 #  このスプリクトを使って収益を得るような利用はできません # 3.このスクリプトを許可無く複製、掲載、配布できません # 4.このスクリプトを改造して個人で利用することは許可無く自由ですが、 # このスクリプトを改造したものを再配布することはできません # 5.このスクリプトを使用したいかなる損害に対して作者は一切の責任を負いません # 6.このスクリプトについて、直接メールによる質問は一切お受けいたしておりません # 7.このスクリプトの設置に関する質問はサポート掲示板(SupportBBS)をご利用下さい # #【 特徴 】 # 1.この日記帳は画像アップロード可能なカレンダー付き日記帳です。 # 2.この日記帳は管理者だけが記事の登録、削除ができます。(管理パスワード必須) # 3.この日記帳は投稿記事の表示にはリスト表示モードと指定日表示モードがあります。 # また、最初にアクセスした時に表示するモードを設定することが可能です。 # 4.この日記帳は投稿記事の表示文字色を選択することができます。 # 5.この日記帳はカレンダーに表示するアイコンを選択することができます。 # 6.この日記帳は投稿記事にアップロード画像を添付することができます。 # 但し、アップロード可能な画像は GIF, JPEG, PNG, BMP のみです。 # 7.この日記帳は投稿記事に一切のタグを使用できません。 # 但し、URLやメールアドレスを記述するとリンクされます。 # また、文字化けの原因となる半角カタカナは使用できません。 # 8.この日記帳は設定月前の記事を過去ログとしてHTMLページに保存します。 # ゆえに、生ログは設定月間の記事だけになります。 # 9.この日記帳はファイルロック、クッキー、二重投稿防止対応です。 # ただし、ファイルロック、クッキーを無効に設定することもできます。 # 10.その他、カウンター(GIF画像連結タイプ)が標準添付されています。 # カウンターの管理モードによりアクセスログの閲覧ができます。 # #【 設置 】 # 1.必要な下記のライブラリ「cgi-lib.pl」は添付されています。 # 日本語コード変換ライブラリ「jcode.pl」 # 画像サイズ取得ライブラリ「getpicsize.pl」 # カウンター用のGIF画像連結ライブラリ「gifcat.pl」 # ただし、これらの最新版を利用したい場合は別途ご用意ください。 # 2.サンプル添付以外のアイコンを使う場合は別途ご用意ください。 # カウンターに添付されている数字GIF画像以外を使う場合は別途ご用意ください。 # 3.本体CGIスクリプト「cloverdiary.cgi」をメモ帳などで開き各種設置事項を書換えて下さい。 # 特に管理パスワード、管理人HPアドレスは必ず書換えて下さい。 # 4.必要に応じて標準添付カウンターの本体CGIスクリプト「stcount.cgi」と # 管理用「stctacc.cgi」の基本事項設定を直接書換えて下さい。(管理パスワード書換必須) # および、管理モードにて環境設定データの内容を必要に応じて変更して下さい。 # 5.ディレクトリ、ファイル、パーミッションを下記例のように配置します。 # 特に「アップロード画像保存用ディレクトリ」と「HTMLページ保存用ディレクトリ」の # パーミッションは読書き可能な[777]に設定する必要があります。 # #【 利用 】 # 1.著作権表示は必ず必要です。改造して個人で利用する場合も必要です。 # スクリプトの再配布は改造の有無に関わらず、お断りします。 # 2.その他、ご利用の注意事項は同梱された「利用規定(kitei.txt)」を熟読ください。 # 3.スクリプトをダウンロードした場合、無条件にこれらの規定に同意したものとみなします。 # #【 配置 】 # public_html(ホーム・ディレクトリ) #  | #  +- cloverdiary [755] / STYLE DIARY用ディレクトリ #    |      cloverdiary.cgi [755](アスキー転送) 本体CGIスクリプト #    |      cloverdiary.log [666](アスキー転送) ログデータ #    |      cloverdiary.css [644](アスキー転送) スタイルシート定義 #    |      cloverdiary_side.css [644](アスキー転送) 左側のスタイルシート定義 #    |      cgi-lib.pl   [644](アスキー転送) CGIライブラリ #    |      jcode.pl    [644](アスキー転送) 日本語コード変換ライブラリ #    |      getpicsize.pl  [644](アスキー転送) 画像サイズ取得ライブラリ(改) #    |      index.html   [644](アスキー転送) ダミーページ #    | #    +- imgs [755] / 背景画像、アイコン用ディレクトリ #    |      icon1.gif、icon2.gif、icon3.gif、icon4.gif、icon5.gif [644](バイナリ転送) アイコン #    | kabef.gif [644](バイナリ転送) フレーム部背景画像 #    | kabes.gif [644](バイナリ転送) 記事表示部背景画像 #    |      bk.gif [644](バイナリ転送) 記事表示部罫線用画像 #    |      title.gif [644](バイナリ転送) タイトル画像 #    | #    +- upimgs [777] / アップロード画像保存用ディレクトリ #    | #    +- old [777] / 過去ログのHTMLページ保存用ディレクトリ #    | #    +- lockdir [777] / ファイルロック処理用ディレクトリ(使用しない場合は不要) #    | # カウンター(Style Counter ver0.13b)が標準添付されています。(使用しない場合は不要) #    | #    +- count [755] / カウンター用ディレクトリ #      |    stcount.cgi [755](アスキー転送) 本体CGIスクリプト #      |    stctacc.cgi [755](アスキー転送) 環境設定CGIスクリプト #      |    stcount.dat [666](アスキー転送) カウントデータ #      |    stctinit.dat [666](アスキー転送) 環境設定データ #      |    stctacc.dat [666](アスキー転送) アクセスデータ #      |    jcode.pl   [644](アスキー転送) 日本語コード変換ライブラリ #      |    gifcat.pl  [644](アスキー転送) GIF画像連結ライブラリ #      | #      +-- stctimgs [755] / カウンタ画像用ディレクトリ #      |    0.gif、1.gif、... 9.gif [644](バイナリ転送) 数字GIF画像 #      | #      +-- lockdir [777] / ファイルロック処理用ディレクトリ(使用しない場合は不要) # #【 謝辞 】 # 1.「cgi-lib.pl」CGIライブラリ Copyright(c) 1993-1999 Steven E. Brenner # 2.「jcode.pl」日本語コード変換ライブラリ Copyright(c) 1995-1999 Kazumasa Utashiro # 3.「gifcat.pl」GIF画像連結ライブラリ Copyright(c) 1997,2002 http://tohoho.wakusei.ne.jp/ # 4.「getpicsize.pl」画像サイズ取得ライブラリ(改) Copyright(c) 2001-2002 cachu # #【 履歴 】 # 1. 2003/02/05:Ver1.02 初版 # 2. 2003/05/14:Ver1.03 表示モード、スタイルシート、過去ログ生成の修正など # 3. 2003/06/09:Ver1.04 過去ログ移行の月数指定など # ////////////////////////////////////////////////////////////////// 設定 # スプリクトバージョン $ver = 'Clover Diary Ver1.04 at2003.06.09'; # ライブラリ設定 require './getpicsize.pl'; # 画像サイズ取得ライブラリ(改) Copyright(c) 2001-2002 cachu require './cgi-lib.pl'; # CGIライブラリ Copyright (c) 1993-1999 Steven E. Brenner require './jcode.pl'; # 日本語コード変換ライブラリ Copyright(c) 1995-1999 Kazumasa Utashiro # ////////////////////////////////////////////////////////////////////// # # これより以降の各種設定値を必要に応じて直接書換えて下さい # # シフトJISコードで文字化けする次の文字を使う場合は \ を後ろに付けます # ソ噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭 # # ////////////////////////////////////////////////////////////////////// # ■ 基本設定 ■ $admin_password = 'koriyufu'; # 管理パスワード(英数 8文字以下、必ず変更して下さい) $cookie_id = 'cloverdiary'; # クッキー識別子名( 'skylediary' など、クッキーを保持しない場合には '' とする) $lockdir = ''; # ファイルロック処理用ディレクトリ( './lockdir/stylediary' など、ロック処理しない場合には '' とする) $self_file = './cloverdiary.cgi'; # このCGIスクリプトファイル $logfile = './cloverdiary.log'; # ログデータファイル # CGI設置が別の専用サーバーの場合。または、CGIを設置するディレクトリ(cgi-binなど)が決まっている場合は、 # 相対パスではなく、絶対パス(「 http:// から始まるフルパス(URL)」や「 / から始まるフルパス」)を設定して下さい。 $style_css_side= './cloverdiary_side.css'; # ページからのスタイルシート(左カレンダー側)呼出用ファイル $style_css = './cloverdiary.css'; # ページからのスタイルシート(右記事表示側)呼出用ファイル $style_css_old = '../cloverdiary.css'; # 保存HTMLページからのスタイルシート(右記事表示側)呼出用ファイル $imgs_url = './imgs/'; # ページからのアイコン画像呼出用ディレクトリ $imgs_url_old = '../imgs/'; # 保存HTMLページからのアイコン画像呼出用ディレクトリ $upimg_dir = './upimgs/'; # CGIからの画像アップロード用ディレクトリ( http://から始まるURLではない) $upimg_url = './upimgs/'; # ページからのアップロード画像呼出用ディレクトリ $upimg_url_old = '../upimgs/'; # 保存HTMLページからのアップロード画像呼出用ディレクトリ $vewold_dir = './old/'; # CGIからの保存HTMLページ用ディレクトリ( http://から始まるURLではない) $vewold_url = './old/'; # ページからの保存HTMLページ呼出用ディレクトリ # ■ 付属カウンター設定 ■ $counter_dir = ''; # カウンタ設置のディレクトリ( './count/' など、カウンターを使用しない場合には '' とする) $counter_name = 'stcount.cgi'; # カウンタ本体CGIのスクリプト名 $counter_admin = 'stctacc.cgi'; # カウンタ管理CGIのスプリクト名 # ■ 著作権表示の設定 ■ $material_name = 'Pastel'; # 画像素材の著作者名(必要ない場合には '' とする) $material_url = 'http://pastel.oheya.jp/'; # 画像素材の著作サイトURL(必要ない場合には '' とする) $arrange_name = 'Pastel'; # アレンジ(改造)の著作者名(削除不可) $arrange_url = 'http://pastel.oheya.jp/'; # アレンジ(改造)の著作サイトURL(削除不可) $script_name = 'CGI-Style'; # スプリクトの著作権者名(削除不可) $script_url = 'http://cgistyle.net/'; # スプリクトの著作権サイトURL(削除不可) # ■ 環境設定 ■ $admin_home = ''; # 管理人のHPアドレス(使用しない場合には '' とする) $back_month_su = '3'; # 現行ログの保持月数(3程度)今月を含めての保持月数(それ以前の記事は過去ログに移行) $pagesize = '10'; # 記事のリスト表示モードでの1ページに表示する記事数(10程度) $first_view = ''; # 最初にアクセスした時に、記事を表示するモード('all':リスト表示、'':指定日表示) $full_size = ''; # 記事の指定日表示での画像の表示サイズ('full':フルサイズ表示、'':縮小表示) $maxdatakb = '30'; # 投稿(画像+記事)受理最大データサイズ( 30KB程度以下 ) $max_w = '200'; # 記事の指定日表示での画像横幅の最大表示サイズ(これを越えるものは縮小表示されます) $max_h = '160'; # 記事の指定日表示での画像高さの最大表示サイズ(これを越えるものは縮小表示されます) $table_width = '350'; # 投稿表示テーブル幅サイズ(ピクセル実数値、または%値) $body_topmargin = ''; # ページの上部マージンサイズ $body_leftmargin = ''; # ページの左部マージンサイズ $body_txt = ''; # ページのテキスト色(スタイルシートファイルの定義が優先します) $body_bgcolor = '#FFF0F5'; # ページ全体の背景色(スタイルシートファイルの定義が優先します) $body_bg_gif = '#FFF0F5'; # ページ全体の背景画像(スタイルシートファイルの定義が優先します) $table_bg_gif = 'bk.gif'; # テーブルの罫線画像 @text_colors = ('#00687C','#564539','#007B50','#614876','#4B474D','#B8883B','#FD5A2A'); # 記事文字色コード @view_icons = ('icon1.gif','icon2.gif','icon3.gif','icon4.gif','icon5.gif'); # 記事表示アイコン $border_cale_menu = '
'; # カレンダー下部メニュー上下の境界線 $border_show_one = '
'; # 記事の指定日表示での記事の境界線 $border_show_all = '
'; # 記事のリスト表示での記事の境界線 $midashi_cale = '日付アイコンをクリックすると
その日の部活動日誌を閲覧できます。'; # カレンダー上部に表示するメッセージの設定 $midashi_list = '部活動日誌(一覧)'; # リスト表示モード時の上部見出文の設定 $midashi_show = '部活動日誌'; # 指定日表示モード時の上部見出文の設定 $today_font_color = '#999999'; # 今日の日付数字色 $today_cell_bgcolor = '#ffffff'; # 今日の日付セル色 $diary_name = 'Day Note'; # プラウザに表示されるタイトル $title_moji = 'Day Note'; # 日記帳のタイトル文字 $title_gif = 'title.gif'; # 日記帳のタイトル画像(画像の指定が優先されます) $help_title = 'Help'; # 使用説明モードのアンカータイトル表示文字 $help_label = 'HELP'; # 使用説明モードのアンカー文字 $help_gif = ''; # 使用説明モードのアンカー画像(画像の指定が優先されます) $list_title = 'List'; # 記事のリスト表示モードのアンカータイトル表示文字 $list_label = 'LIST'; # 記事のリスト表示モードのアンカー文字 $list_gif = ''; # 記事のリスト表示モードのアンカー画像(画像の指定が優先されます) $page_next_title = 'Next Page'; # 次ページ移動のアンカータイトル表示文字 $page_next_label = 'Next >>'; # 次ページ移動のアンカー文字 $page_next_gif = ''; # 次ページ移動のアンカー画像(画像の指定が優先されます) $page_back_title = 'Back Page'; # 前ページ移動のアンカータイトル表示文字 $page_back_label = '<< Back'; # 前ページ移動のアンカー文字 $page_back_gif = ''; # 前ページ移動のアンカー画像(画像の指定が優先されます) $month_next_title = 'Next Month'; # 次月移動のアンカータイトル表示文字 $month_next_label = '>>'; # 次月移動のアンカー表示文字 $month_next_gif = ''; # 次月移動のアンカー表示画像(画像の指定が優先されます) $month_back_title = 'Back Month'; # 前月移動のアンカータイトル表示文字 $month_back_label = '<<'; # 前月移動のアンカー表示文字 $month_back_gif = ''; # 前月移動のアンカー表示画像(画像の指定が優先されます) $admin_home_title = 'Admin Home'; # 管理人ホームページのアンカータイトル表示文字 $admin_home_label = 'HOME'; # 管理人ホームページのアンカー文字 $admin_home_gif = ''; # 管理人ホームページのアンカー画像(画像の指定が優先されます) $admin_home_target = '_blank'; # 管理人ホームページのアンカーリンクのターゲット指定 $oldlog_label = 'Old Log'; # 過去ログ選択のラベル文字 $input_label = 'Write'; # 記事入力画面へのラベル文字 $delete_label = 'Delete'; # 記事削除実施のラベル文字 $submit_write_label = 'Write'; # 記事登録実施のサブミットボタン表示文字 $submit_input_label = 'GO'; # 記事入力画面へのサブミットボタン表示文字 $submit_delete_label = 'GO'; # 記事削除実施のサブミットボタン表示文字 $input_area_date = 'Date'; # 記事入力部の日付表示文字 $input_area_year = '年'; # 記事入力部の年の表示文字 $input_area_month = '月'; # 記事入力部の月の表示文字 $input_area_day = '日'; # 記事入力部の日の表示文字 $input_area_subject = 'Title'; # 記事入力部のSubject表示文字 $input_area_message = 'Mess'; # 記事入力部のMessage表示文字 $input_area_color = 'Color'; # 記事入力部のColor表示文字 $input_area_icon = 'Icon'; # 記事入力部のIcon表示文字 $input_area_upimge = 'Image'; # 記事入力部のUpImage表示文字 # ////////////////////////////////////////////////////////////////////// MAIN # /////////////////////////////////////////////////////////////////////////// # # 注意:これ以降の記述を変更した場合はスプリクトの改造(アレンジ)となります。 # #    改造して個人で利用することは許可無くまったく自由でが、 #    改造したものを再配布する場合には事前の許可が必要です。 # # /////////////////////////////////////////////////////////////////////////// # 記事が登録されていない場合のコメントの設定 $non_subject = '記事はありません'; # 記事が未登録時の題名表示 $non_text = 'まだ記事は登録されていません。'; # 記事が未登録時の記事表示 # 記事受理最大サイズ設定 $cgi_lib'maxdata = 1024 * $maxdatakb; # cgi-lib.pl制御による(記事+画像)受理最大サイズ(バイト値) # 添付可能画像の説明文の設定 $input_upimge_type = 'GIF,JPG,PNG,BMP'; # アップロード可能な画像種類の表示用 $midashi_input = "$maxdatakb kB以下の画像($input_upimge_type)を添付できます"; # カウンタファイルURL設定 $counter_name = $counter_dir . $counter_name; # カウンタのディレクトリ+スクリプト名 $counter_admin = $counter_dir . $counter_admin; # カウンタ管理モードのディレクトリ+スプリクト名 # 各画像ファイルURL設定 if ($body_bg_gif) { $body_bg_gif_url = $imgs_url . $body_bg_gif; } if ($table_bg_gif) { $table_bg_gif_url = $imgs_url . $table_bg_gif; } if ($title_gif) { $title_gif = $imgs_url . $title_gif; } if ($help_gif) { $help_gif = $imgs_url . $help_gif; } if ($page_back_gif) { $page_back_gif = $imgs_url . $page_back_gif; } if ($page_next_gif) { $page_next_gif = $imgs_url . $page_next_gif; } if ($admin_home_gif) { $admin_home_gif = $imgs_url . $admin_home_gif; } # ユーザー情報取得 $addr = $ENV{ 'REMOTE_ADDR'}; $host = $ENV{ 'REMOTE_HOST'}; if ($host eq "") { $host_name = $addr; } if ($host eq "$addr") { $host_name = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; } $host =$host_name; $agent = $ENV{ 'HTTP_USER_AGENT'}; $referer = $ENV{ 'HTTP_REFERER'}; # 携帯からの閲覧制限 $imodo_look = '1'; # 閲覧制限(0:No, 1:Yes) if ($imodo_look eq '1') { ( $agent_type, $etc, ) = split( /\//, $agent ); if ($agent_type ne 'Mozilla') { print "Content-type: text/html\n\n"; print "\n"; print "携帯からはご覧になれません。\n"; exit; } } # クッキー情報取得 &get_cookie(); $view_icon = $cookie{'view_icon'}; $text_color = $cookie{'text_color'}; if($cookie_id){ $password = $cookie{'password'}; } else{ $password = ''; } # POST&GETデータ取得 &decode; if( $in{'job'} eq 'help' ) { $mode = 'help'; &help;} # HELPページ表示処理 elsif( $in{'job'} eq 'cale' ) { $mode = 'cale'; } # カレンダ表示処理 elsif( $in{'job'} eq 'show' ) { $mode = 'show'; } # 指定日表示処理 elsif( $in{'job'} eq 'list' ) { $mode = 'list'; } # リスト表示処理 elsif( $in{'job'} eq 'del' ) { $mode = 'del'; } # 記事削除実行 elsif( $in{'job'} eq 'input' ) { $mode = 'input'; } # 書込要求 elsif( $in{'job'} eq 'write' ) { $mode = 'write'; } # 書込実行 elsif( $in{'job'} eq 'ver' ) { $mode = 'ver'; &ver;} # ヴァージョン表示処理 else { &start; } # 受取年月日データを変数に設定 $y = $in{'y'}; $m = $in{'m'}; $d = $in{'d'}; # 受取ページ数を変数に設定 $page = $in{'page'}; # 記事チェック if($mode eq 'write'){ # 受取データを変数に設定 $in_year = $in{'in_year'}; # 年 $in_month = $in{'in_month'}; # 月 $in_day = $in{'in_day'}; # 日 $subject = $in{'subject'}; # 題名 $text = $in{'text'}; # 記事 $view_icon = $in{'view_icon'}; # イメージ $text_color = $in{'text_color'}; # 記事文字色 $upimg_file = $in{'upimg_file'}; # 添付画像 $password = $in{'password'}; # パスワード # 記事項目チェック if(($in_year eq '')||($in_month eq '')||($in_day eq '')||($text eq '')){&show_error('「年月日」と「記事」は省略できません' );} # クッキー設定 $cookie{'view_icon'} = $view_icon; $cookie{'text_color'} = $text_color; if($cookie_id){ $cookie{'password'} = $password; } else{ $cookie{'password'} = ''; } &set_cookie(); } # 各処理の実行 # 画像アップロード処理 if($mode eq 'write'){ if($in{'upfile'}){&up_file;} } # ログファイル操作 if( $lockdir ) { unless( &lock($lockdir)) {&show_error('只今ビジー状態です。しばらくして再度アクセスして下さい。');} } open( LOGFILE, "+<$logfile"); @logs = ; if($mode eq 'write'){ &write_log; } elsif($mode eq 'del'){ &del_log; } close( LOGFILE ); if( $lockdir ) { &unlock( $lockdir ); } if( $password_error ) { &show_error( 'パスワードが違います。' ); } # ログデータ操作後のファイルの再読込 if(($mode eq 'write')||($mode eq 'del')){ &start; } # 内容設定 if( $mode eq 'input' ) { $midashibun = $midashi_input; $job = 'write'; } elsif( $mode eq 'list' ){ $midashibun = $midashi_list; } elsif( $mode eq 'show' ){ $midashibun = $midashi_show; } else { $midashibun = $midashi_show; } # 各処理実施 if($mode eq 'cale') { &show_cale; } elsif( $mode eq 'input'){ &show_input; } elsif( $mode eq 'list') { &show_all; } elsif( $mode eq 'show') { &show_one; } else { &show_one; } # メイン終了 exit; # /////////////////////////////////////////////////////////////////////// SUB # 日記帳の表示 sub start { print "content-type: text/html\n\n"; print < $diary_name HTML_END if( $first_view eq 'all' ){ print "\n"; } else{ print "\n"; } print <

このページにはフレームが使用されていますが、お使いのブラウザではサポートされていません。

HTML_END exit; } # カレンダー部の表示 sub show_cale { print "Content-type: text/html\n\n"; print < $diary_name
 
$midashi_cale
HTML_END # カレンダー表示 &show_diary_calender; # リンク作成 $make_home_link = &make_home_link( $admin_home, $admin_home_target, $admin_home_title, $admin_home_label, $admin_home_gif ); $make_help_link = &make_job_link( "help", $help_title, $help_label, $help_gif ); $make_list_link = &make_job_link( "list", $list_title, $list_label, $list_gif ); $make_material_link = &make_copyright_link( "Material", $material_url, $material_name ); $make_arrange_link = &make_copyright_link( "Arrange", $arrange_url, $arrange_name ); $make_script_link = &make_copyright_link( "Script", $script_url, $script_name ); print <  
$oldlog_label  $input_label  
$make_material_link
$make_arrange_link
$make_script_link
HTML_END exit; } # カレンダーの表示 sub show_diary_calender { $month_next_link = &make_move_link( $month_next_label, $month_next_gif ); $month_back_link = &make_move_link( $month_back_label, $month_back_gif ); @MonthDays = (31,28,31,30,31,30,31,31,30,31,30,31); @MonthName = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @WeekName = ('Sun','Mon','Tue','Wed','Thr','Fri','Sat'); ( $sec, $min, $hour, $day, $month, $year, $wday ) = localtime( time ); $now_year = $year + 1900; $now_month = $month + 1; $now_day = $day + 0; $now_wday = $wday + 0; if(($y eq '')||($m eq '')||($d eq '')){ $y = $now_year; $m = $now_month; $d = $now_day; } if($m==1){ $back_month = 12; $back_year = $y - 1; } else{ $back_month = $m - 1; $back_year = $y; } if($m==12){ $next_month = 1; $next_year = $y + 1; } else{ $next_month = $m + 1; $next_year = $y; } # 表示月の日数 if((($y%4==0)&&($y%100!=0))||($y%400==0)){@MonthDays[1]=29;} $viewmonthdays = @MonthDays[$m-1]; # 月移動アンカー設定 print <
$month_back_link @MonthName[$m-1] $y $month_next_link
 
HTML_END print "\n"; print "
\n"; # 枠線表示 print "\n"; print ""; # 曜日表示 for($i=0; $i<7; $i++){print "\n";} print "\n"; print ""; # 日数表示 $col=0; $startday = &getweekday($y, $m, 0); for($i=0; $i<$startday; $i++){print "\n"; $col++;} for($i=1; $i<=$viewmonthdays; $i++){ $Day_chck = 0; # 今日のマーキング if(($y==$now_year)&&($m==$now_month)&&($i==$now_day)){ print "\n"; $col++; if($col==7){print "\n"; $col=0;} } print "
@WeekName[$i]
"; } else { print ""; } # 記事がある日は表示アンカーを作成する foreach $line ( @logs[ 0 .. $#logs ] ) { ( $log_today, $log_year, $log_month, $log_day, $log_subject, $log_text, $log_view_icon, ) = split( /<>/, $line ); if(($y==$log_year)&&($m==$log_month)&&($i==$log_day)) { print ""; # アイコン表示 if($log_view_icon){ print "
";} else{ print "
";} last; } } # 今日のマーキング(日数色の反転) if(($y==$now_year)&&($m==$now_month)&&($i==$now_day)){ print "$i"; } else { print "$i"; } print "
\n"; print "
\n"; } # 表示部のヘッダ表示 sub show_heder { print "Content-type: text/html\n\n"; print < $diary_name
 
HTML_END if( $title_gif ) { print ""; } else { print "$title_moji"; } print <
 
$midashibun
 
HTML_END } # 1日表示 sub show_one { # 表示部のヘッダの表示 &show_heder; if($#logs<1){returun;} $num = $#logs + 1; if((!$y)||(!$m)||(!$d)){ ( $today, $year, $month, $day, $subject, $text, $view_icon, $text_color, $upimg_file ) = split( /<>/, @logs[0] ); $y = $year; $m = $month; $d = $day; } $kaisou = 0; foreach $line ( @logs[ 0 .. $#logs ] ) { ( $today, $year, $month, $day, $subject, $text, $view_icon, $text_color, $upimg_file ) = split( /<>/, $line ); if(($y==$year)&&($m==$month)&&($d==$day)) { $kaisou++; &show_one_rec; # last; # 1件のみ表示して終了 } $num--; } if($kaisou==0){ $day = $d; $subject = $non_subject; $text = $non_text; $text_color = ''; $view_icon = ''; &show_one_rec; } print < HTML_END exit; } # 1日表示の1レコード表示 sub show_one_rec { # タグ変換 $subject = &change_special_to_view( $subject ); $text = &change_special_to_view( $text ); # イメージ&カラー指定がない場合 if( $text_color eq '' ) { $text_color = @text_colors[0]; } if( $view_icon eq '' ) { $view_icon = @view_icons[0]; } # 年月日表示設定 @MonthDays = (31,28,31,30,31,30,31,31,30,31,30,31); @MonthName = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @WeekName = ('Sun','Mon','Tue','Wed','Thr','Fri','Sat'); $e_month = @MonthName[$m - 1]; $e_wday = @WeekName[&getweekday($y, $m, $d) - 1]; print <
$border_show_one
 
HTML_END if($view_icon){ print "";} print <$y $e_month $d ($e_wday)
 
「 $subject 」
 
$text
HTML_END if($full_size eq 'full'){ # 画像のフルサイズ表示 if ($upimg_file) { print "\n"; } } else { # 画像の縮小・サブウインドウ表示 if ($upimg_file) { local($format, $img_w, $img_h, $ratio_w, $ratio_h, $ratio, $subwin_w, $subwin_h); # 画像サイズ取得ライブラリ(getpicsize.pl) ($format, $img_w, $img_h) = &GetImageSize("$upimg_dir$upimg_file"); # 画像の縮小表示サイズ取得 if (($img_w > $max_w) || ($img_h > $max_h)) { $ratio_w = $max_w / $img_w; $ratio_h = $max_h / $img_h; if ($ratio_w < $ratio_h) { $ratio = $ratio_w; } else { $ratio = $ratio_h; } $ratio_w = int ($img_w * $ratio); $ratio_h = int ($img_h * $ratio); } else{ $ratio_w = $img_w; $ratio_h = $img_h; } # サブ・ウインドウのサイズ設定 if($ratio){ $subwin_w = $img_w + 22; $subwin_h = $img_h + 33; $window_name = $upimg_file; $window_name =~ s/\./$1/; print "\n"; } else{ print "\n"; } } } print <
 
no.$num
 
$delete_label  
HTML_END } # リスト表示 sub show_all { # 表示部のヘッダの表示 &show_heder; $page = 1 if( $page eq '' ); # $pageが空の場合、最新履歴を表示する $page_total = int(( $#logs + 1 ) / $pagesize ); if(( $#logs + 1 ) % $pagesize) { $page_total = $page_total + 1; } $page_start_line = ( $page - 1 ) * $pagesize; $page_end_line = $page_start_line + $pagesize - 1; if( $page_end_line > $#logs ) { $page_end_line = $#logs; } $page_rest = $#logs - $page_end_line; $line_no = $#logs + 1 - $page_start_line; foreach $line ( @logs[ $page_start_line .. $page_end_line ] ) { &show_all_rec( $line_no, $line ); # ページ移動のアンカー設定 $page_next_link = &make_move_link( $page_next_label, $page_next_gif ); $page_back_link = &make_move_link( $page_back_label, $page_back_gif ); if( $page < $page_total ) { $next_page = $page + 1; $next = "$page_next_link"; $rest = $nbsp."REST $page_rest"; } if( $page > 1 ) { $back_page = $page - 1; $back = "$page_back_link"; } $line_no = $line_no - 1; } print <  
$back Page($page/$page_total) $next
 
HTML_END exit; } # リスト表示の1レコード表示 sub show_all_rec { local( $line_no, $line ) = @_; $num = $line_no; ( $today, $year, $month, $day, $subject, $text, $view_icon, $text_color, $upimg_file ) = split( /<>/, $line); $y = $year; $m = $month; $d = $day; # タグ変換 $text = &change_special_to_view( $text ); # ゲストイメージ&ゲストカラーの指定がない場合 if( $text_color eq '' ) { $text_color = @text_colors[0]; } if( $view_icon eq '' ) { $view_icon = @view_icons[0]; } # 年月日表示設定 @MonthDays = (31,28,31,30,31,30,31,31,30,31,30,31); @MonthName = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @WeekName = ('Sun','Mon','Tue','Wed','Thr','Fri','Sat'); $e_month = @MonthName[$month - 1]; $e_wday = @WeekName[&getweekday($year, $month, $day) - 1]; print <
 
HTML_END print""; # アイコン表示(指定日の記事表示へのアンカーリンク付き) print ""; print "
"; print ""; if($view_icon){ print "";} else{ print "";} print ""; print " "; print ""; # 記事の題名表示(指定日の記事表示へのアンカーリンク付き) print ""; print "$subject"; print ""; print " "; print ""; # 年月日表示 print "$y $e_month $d ($e_wday) no.$num"; print "
"; print <
$border_show_all
HTML_END } # 記事入力部の表示 sub show_input { # パスワード認証 if ($admin_password ne "$in{'password'}") { &show_error( "パスワードが違います。" ); } # 今日の年月日取得 ( $yyyymmdd, $hhmmss, $yyyy, $mm, $dd, $youbi ) = &gettime(); # 表示部のヘッダの表示 &show_heder; print <
 
$input_area_date $input_area_year   $input_area_month   $input_area_day
$input_area_icon HTML_END # 記事表示アイコンの選択 foreach $icon ( @view_icons ) { if( $view_icon eq $icon ) { print "\n"; } else { print "\n"; } } print <
$input_area_subject
$input_area_message
$input_area_color HTML_END # 記事文字カラーの選択 foreach $color ( @text_colors ) { if( $text_color eq $color ) { print "\n"; } else { print "\n"; } } print <
$input_area_upimge
 
 
Back
HTML_END exit; } # 記事削除実施 sub del_log { # パスワード認証 if ($admin_password ne "$in{'password'}") { &show_error( "パスワードが違います。" ); } # 記事削除 $del_no = $#logs + 1 - $in{'num'}; $line = @logs[$del_no]; ( $delete_today, $delete_year, $delete_month, $delete_day, $delete_subject, $delete_text, $delete_view_icon, $delete_text_color, $delete_upimg_file, ) = split( /<>/, $line ); splice( @logs, $del_no, 1); seek( LOGFILE, 0, 0 ); print LOGFILE @logs; truncate( LOGFILE, tell( LOGFILE )); # アップロード画像があれば削除 if(-e "$upimg_dir$delete_upimg_file"){unlink "$upimg_dir$delete_upimg_file";} } # 記事書込実施 sub write_log { # パスワード認証 if ($admin_password ne "$in{'password'}") { &show_error( "パスワードが違います。" ); } # 入力年月日のチェック &input_yyymmdd_chck; # 現在の年月日 ( $sec, $min, $hour, $day, $month, $year, $wday ) = localtime( time ); $now_year = $year + 1900; $now_month = $month + 1; $now_day = $day + 0; # 過去ログ移行の年月を算出 $old_back_month = $now_month - $back_month_su; if( $old_back_month > 0 ){ $old_back_year = $now_year; } else{ $old_back_month = -1 * $old_back_month; $old_back_year = $now_year - int( $old_back_month / 12 ) - 1; $old_back_month = 12 - ( $old_back_month % 12 ); } # 投稿記事の年月日制限チェック if($old_back_year>$in_year){ &show_error( "$back_month_su ヶ月以前の記事は投稿できません。" ); } if(($old_back_year==$in_year) && ($old_back_month>=$in_month)) { &show_error( "$back_month_su ヶ月以前の記事は投稿できません。" ); } # 投稿記事の改行タグ変換 $text =~ s/\r?\n/
/g; # 投稿日時設定 ( $yyyymmdd, $hhmmss, $yyyy, $mm, $dd, $youbi ) = &gettime(); $today = $yyyymmdd . '-' . $hhmmss; # 記事データ作成 $in_year = sprintf( "%04d", $in_year ); $in_month = sprintf( "%02d", $in_month ); $in_day = sprintf( "%02d", $in_day ); $data = "$today<>$in_year<>$in_month<>$in_day<>$subject<>$text<>$view_icon<>$text_color<>$upimg_file<>\n"; # 二重投稿チェック $double_count = 3; # 二重投稿チェック回数 $double_match = 0; if( $#logs < $double_count ) { $until_count = $#logs; } else { $until_count = $double_count - 1; } foreach $check_log ( @logs[ 0 .. $until_count ] ) { ( $check_today, $check_year, $check_month, $check_day, $check_subject, $check_text ) = split( /<>/, $check_log ); $double_match = 1 if( ( $in_day eq $check_day ) && ( $text eq $check_text ) ); } # 記事データ追加 if( $double_match eq 0 ) { # 記事データ追加 unshift( @logs, $data ); # $check_year, $check_month, $check_dayの値で昇順ソート @logs = sort{ ( (split(/<>/, $b))[1] . (split(/<>/, $b))[2] . (split(/<>/, $b))[3] ) cmp ( (split(/<>/, $a))[1] . (split(/<>/, $a))[2] . (split(/<>/, $a))[3] ) } @logs; # 前々月の記事の先頭番号 $old_num = 0; foreach $line ( @logs[ 0 .. $#logs ] ) { ( $check_today, $check_year, $check_month, $check_day, ) = split( /<>/, $line ); if( ($old_back_year==$check_year)&&($old_back_month>=$check_month) ) { last; } if( $old_back_year>$check_year ) { last; } $old_num++; } # 前々月の記事を過去ログ(HTMLファイル)へ if ($old_num <= $#logs){ # HTMLファイル名 $html_file_name = "diary\_$check_year\_$check_month\.html"; $html_file = "$vewold_dir$html_file_name"; # 前々月の記事をHTMLファイルに保存 open(HTMLFILE,">$html_file") || &show_error("file [$html_file] open error."); print HTMLFILE &old_page_make( $old_num ); # HTML生成処理 close(HTMLFILE); } # ログデータから過去ログへ保存した記事の削除 foreach( $old_num .. $#logs ) { pop @logs; }; seek( LOGFILE, 0, 0 ); print LOGFILE @logs; truncate( LOGFILE, tell( LOGFILE )); } } # 過去ログ HTML生成処理 sub old_page_make { local( $start_num ) = @_; $make_material_link = &make_copyright_link( "Material", $material_url, $material_name ); $make_arrange_link = &make_copyright_link( "Arrange", $arrange_url, $arrange_name ); $make_script_link = &make_copyright_link( "Script", $script_url, $script_name ); # ヘッダー部生成 $html = ''; $html .= "\n"; $html .= "$diary_name\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; #ボディー部生成 $html .= "\n"; $html .= "\n"; $html .= "
 
\n"; if( $title_gif ) { $html .= "\n"; } else { $html .= "$title_moji\n"; } $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "
 
$midashibun
 
\n"; $html .= "
\n"; $num = $#logs - $start_num + 1; foreach $line ( @logs[ $start_num .. $#logs ] ) { &old_rec_make( $num, $line ); # 1レコード毎のHTML生成処理 $num--; } $html .= "\n"; $html .= "
 
\n"; # フッタ部生成 $html .= "\n"; $html .= "
\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "
$make_material_link
$make_arrange_link
$make_script_link
\n"; $html .= "\n"; } # 1レコード毎のHTML生成処理 sub old_rec_make { local( $num, $line ) = @_; ( $today, $year, $month, $day, $subject, $text, $view_icon, $text_color, $upimg_file ) = split( /<>/, $line ); $y = $year; $m = $month; $d = $day; $text = &change_special_to_view( $text ); if( $text_color eq '' ) { $text_color = @text_colors[0]; } if( $view_icon eq '' ) { $view_icon = @view_icons[0]; } @MonthDays = (31,28,31,30,31,30,31,31,30,31,30,31); @MonthName = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @WeekName = ('Sun','Mon','Tue','Wed','Thr','Fri','Sat'); $e_month = @MonthName[$month - 1]; $e_wday = @WeekName[&getweekday($year, $month, $day) - 1]; $html .= "\n"; $html .= "
\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "
$border_show_one
 
\n"; if($view_icon){ $html .= "\n"; } $html .= "$y $e_month $d ($e_wday)
 
\n"; $html .= "\n"; $html .= "
\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "
 
「 $subject 」
 
\n"; $html .= "\n"; $html .= "\n"; $html .= "
\n"; $html .= "$text
\n"; if($full_size eq 'full'){ # 画像のフルサイズ表示 if ($upimg_file) { $html .= "\n"; } } else { # 画像の縮小表示&サブウインドウ表示 if ($upimg_file) { local($format, $img_w, $img_h, $ratio_w, $ratio_h, $ratio, $subwin_w, $subwin_h); # 画像サイズ取得ライブラリ(getpicsize.pl) ($format, $img_w, $img_h) = &GetImageSize("$upimg_dir$upimg_file"); # 画像の縮小表示サイズ取得 if (($img_w > $max_w) || ($img_h > $max_h)) { $ratio_w = $max_w / $img_w; $ratio_h = $max_h / $img_h; if ($ratio_w < $ratio_h) { $ratio = $ratio_w; } else { $ratio = $ratio_h; } $ratio_w = int ($img_w * $ratio); $ratio_h = int ($img_h * $ratio); } else{ $ratio_w = $img_w; $ratio_h = $img_h; } # サブ・ウインドウのサイズ設定 if($ratio){ $subwin_w = $img_w + 22; $subwin_h = $img_h + 33; $window_name = $upimg_file; $window_name =~ s/\./$1/; $html .= "\n"; } else{ $html .= "\n"; } } } $html .= "
\n"; $html .= "
 
\n"; $html .= "
\n"; $html .= "\n"; $html .= "\n"; $html .= "
no.$num
 
\n"; } # 日記帳の使用説明ページを表示 sub help { print "Content-type: text/html\n\n"; print < $diary_name

「 日記帳利用のご案内 」


 記事を閲覧するにはカレンダーにあるアイコンをクリックします
 月の移動はカレンダー上の $month_back_label や $month_next_label をクリックします

 カレンダー下のメニューの $list_label をクリックすることで、
 日付順の記事タイトルのリストを表\示します

 過去ログはカレンダー下の $oldlog_label から閲覧できます

 管理者のみ記事を登録・削除できます。(管理パスワード必須)
 登録はカレンダー下の $input_label から行います
 削除は記事の表\示の時の下の $delete_label から行います

 登録時にはPC内にある画像をアップロードすることができます
   画像タイプ : $input_upimge_type 限定
   画像データ : $maxdatakb kB 以下

 登録時には記事の文字色を選択することができます
 また、カレンダーのアイコンを選択することができます

 記事にタグは一切使用できません
 ただし、URLやメールアドレスを記述するとリンクされます
 文字化けの原因となる半角カタカナは使用できません

 この日記帳はロック処理、クッキー、二重投稿防止対応です
 ただし、ロック処理とクッキー機能\は無効も設定できます

この日記帳は $back_month_su ヶ月以前の記事は過去ログとして保存されます

HTML_END exit; } # 日記帳のバージョンを表示 sub ver { print "Content-type: text/html\n\n"; print < $diary_name

Sprict Name,Ver

$ver

HTML_END exit; } # エラーメッセージ表示 sub show_error { &unlock($lock_dir); local($error_msg) = @_; print "Content-type: text/html\n\n"; print < エラーメッセージ $diary_name error
エラー
$error_msg
Back
HTML_END exit; } # 日記帳のタイトル作成 sub make_title_link { local( $title_moji, $title_gif ) = @_; if( $title_gif eq '' ) { return "$title_moji"; } else { return ""; } } # 移動用アンカー作成 sub make_move_link { local( $page_move_label, $page_move_gif ) = @_; if( $page_move_gif eq '' ) { return "$page_move_label"; } else { return ""; } } # ジョブ用リンク作成 sub make_job_link { local($job, $job_title, $job_label, $job_gif ) = @_; if( $job_gif eq '' ) { return "$job_label"; } else { return ""; } } # URLリンク作成 sub make_home_link { local( $home, $home_target, $home_title, $home_label, $home_gif ) = @_; if( $home ) { if( $home_gif eq '' ) { return "$home_label"; } else { return ""; } } else { return ''; } } # 著作権表示リンク作成 sub make_copyright_link { local( $copyright, $copyright_url, $copyright_name ) = @_; if( $copyright_name ) { if( $copyright_url eq '' ) { return "$copyright : $copyright_name"; } else { return "$copyright : $copyright_name"; } } else { return ''; } } # 入力年月日のチェックサブ sub input_yyymmdd_chck { if((($in_year+0)<1753) || (($in_year + 0)>9999)) {&show_error( "年の入力値が不正です。" );} if((($in_month+0)<1) || (($in_month + 0)>12)) {&show_error( "月の入力値が不正です。" );} if((($in_day+0)<1) || (($in_day + 0)>31)) {&show_error( "日の入力値が不正です。" );} } # 曜日取得サブ sub getweekday($year, $month, $day){ local($year, $month, $day) = @_; if($month == 1 || $month == 2) { $year--; $month += 12; } int($year + int($year/4) - int($year/100) + int($year/400) + int((13*$month+8)/5) + $day + 1) % 7; } # ホスト時間 sub gettime { local( $yyyymmdd, $hhmmss, $yyyy, $mm, $dd, $youbi ); ( $sec, $min, $hour, $day, $month, $year, $wday ) = localtime( time ); $yyyymmdd = sprintf( "%04d\/%02d\/%02d", $year + 1900, $month + 1, $day ); $hhmmss = sprintf( "%02d\:%02d\:%02d", $hour, $min, $sec ); $yyyy = sprintf( "%04d", $year + 1900 ); $mm = sprintf( "%02d", $month + 1 ); $dd = sprintf( "%02d", $day ); $youbi = sprintf( "(%s)", ( )[$wday] ); return $yyyymmdd, $hhmmss, $yyyy, $mm, $dd, $youbi; } # 標準時間 sub gmt_date { local( $data ) = @_; ( $sec, $min, $hour, $day, $month, $year, $wday ) = gmtime( $data ); return sprintf( "%s, %02d %s %04d %02d:%02d:%02d GMT", ( Sun, Mon, Tue, Wed, Thu, Fri, Sat )[ $wday ], $day, ( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec )[ $month ], $year + 1900, $hour, $min, $sec ); } # クッキー設定 sub set_cookie { local( $new_cookie, $date ); @pairs = (); foreach( sort keys %cookie ) { push( @pairs, &escape( $_ ).":".&escape( $cookie{ $_ } ) ); } $new_cookie = join( '&', @pairs ); $date = &gmt_date( time + 86400 * 60 ); # クッキー有効期間(60日) if ( $new_cookie ne $cookies{ $cookie_id } ) { print "Set-Cookie: $cookie_id=$new_cookie; expires=$date\n"; } } # クッキー取得 sub get_cookie { local( $cookie_name, $value ); foreach ( split( /; /, $ENV{ 'HTTP_COOKIE'} ) ) { ( $cookie_name, $value ) = split( /=/ ); $cookies{ $cookie_name } = $value; } foreach ( split( /&/, $cookies{ $cookie_id } ) ) { ( $cookie_name, $value ) = split( /:/ ); $cookie{ &unescape( $cookie_name ) } = &unescape( $value ); } } sub unescape { local( $data ) = @_; $data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge; return $data; } # ロック設定 sub lock { ( $lockdir_name ) = @_; $retry_cnt = 3; # リトライ数 $sleep_sec = 1; # 待ち時間(秒) $yuukou_sec = 5; # 有効時間(秒) $lock_flg = 0; foreach( 1..$retry_cnt ) { if( mkdir( $lockdir_name, 0755 ) ) { $lock_flg = 1; last; } else { sleep( $sleep_sec ); } } if( !$lock_flg ) { @stat_data = stat $lockdir_name; if( ( time - $stat_data[9] ) > $yuukou_sec ) { rmdir $lockdir_name; } } return $lock_flg; } # ロック解除 sub unlock { ( $lockdir_name ) = @_; rmdir $lockdir_name; } # 記事内のURL&メールアドレスのリンク設定 sub change_special_to_view { local($data) = @_; $_ = $data; $_ =~ s/([^=^\"]|^)((http|ftp):[!#-9\?=A-~]+)/$1$2<\/a>/g; $_ =~ s/([\w\-\_]+\@[\w\-\_\.]+)/$1<\/a>/g; return $_; } # デコード処理 sub decode { &ReadParse; # cgi-lib.plのサブルーチン while (($key,$val) = each %in) { if ($key eq 'check') { push(@dels,$val); } if ($key ne 'upfile') { # シフトJISコードに変換 &jcode'convert(*val, "sjis", "", "z"); # タグ処理 $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s//>/g; # 改行処理 if ($key eq "text") { $val =~ s/\r\n/
/g; $val =~ s/\r/
/g; $val =~ s/\n/
/g; } else { $val =~ s/\r//g; $val =~ s/\n//g; } } $in{$key} = $val; } $mode = $in{'mode'}; $page = $in{'page'}; $in{'url'} =~ s/^http\:\/\///; if ($in{'subject'} eq "") { $in{'subject'} = "no title"; } } # 文字列16進数変換 sub escape { local( $data ) = @_; $data =~ s/(\W)/sprintf( "%%%02X", unpack('C', $1 ) )/ge; return $data; } # 画像アップロード処理 sub up_file { $upimg_file =''; $macbinary=0; foreach (@in) { if ($_ =~ /(.*)Content-type:(.*)/i) { $upfiletype=$2; } # ファイル拡張子 if ($_ =~ /(.*)filename=(.*)/i) { $upfilename=$2; } # ファイル名 if ($_ =~ /application\/x-macbinary/i) { $macbinary=1; } # MACチェック } $upfiletype =~ s/\r//g; $upfiletype =~ s/\n//g; $upfilename =~ tr/\"\x0D\x0A//d; # ファイル形式 $flag=0; if ($upfiletype =~ /image\/gif/i) { $upfiletail=".gif"; $flag=1; } if ($upfiletype =~ /image\/.*jpeg/i) { $upfiletail=".jpg"; $flag=1; } if ($upfiletype =~ /image\/png/i) { $upfiletail=".png"; $flag=1; } if ($upfiletype =~ /image\/bmp/i) { $upfiletail=".bmp"; $flag=1; } if ($upfiletype =~ /image\/tiff/i) { $upfiletail=".tif"; $flag=1; } if (!$flag) { if ($upfilename =~ /\.gif$/i) { $upfiletail=".gif"; $flag=1; } if ($upfilename =~ /\.jpe?g$/i) { $upfiletail=".jpg"; $flag=1; } if ($upfilename =~ /\.png$/i) { $upfiletail=".png"; $flag=1; } if ($upfilename =~ /\.bmp$/i) { $upfiletail=".bmp"; $flag=1; } if ($upfilename =~ /\.tif?f$/i) { $upfiletail=".tif"; $flag=1; } } # アップロード不可表示 if (!$flag) { &show_error("アップロードできないファイルです。
( $upfilename )
プラウザの[戻る]で戻ってやり直してください。"); } $upfile = $in{'upfile'}; # MAC処理 if ($macbinary) { $length = substr($upfile,83,4); $length = unpack("%N",$length); $upfile = substr($upfile,128,$length); } # 画像データを書き込み $upimg_file = time . $upfiletail; $imgupfile = $upimg_dir . $upimg_file; open(OUT,"> $imgupfile") || &show_error("アップロードに失敗しました。(ファイルのオープンエラー)"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod (0666,$imgupfile); } # /////////////////////////////////////////////////////////////////////// END 1; __END__