#!/usr/bin/perl # STYLE NEWS ver0.145b at2003.11.10 # Copyright(C) 2001-2003 CGI-Style Net. # URL http://cgistyle.net/ # Mail webmaster@cgistyle.net # #【 注意 】 # 1.このスクリプトの著作権は「CGI-Style Net.」にあります # 2.このスクリプトはフリーソフトです #   このスプリクトは商用サイト、非商用サイトの区別なく利用できますが、 #  このスプリクトを使って収益を得るような利用はできません # 3.このスクリプトを許可無く複製、掲載、配布できません # 4.このスクリプトを改造して個人で利用することは許可無く自由ですが、 # このスクリプトを改造したものを許可無く再配布することはできません # 5.このスクリプトを使用したいかなる損害に対して作者は一切の責任を負いません # 6.このスクリプトについて、直接メールによる質問は一切お受けいたしておりません # 7.このスクリプトの設置に関する質問はサポート掲示板(SupportBBS)をご利用下さい # #【 特徴 】 # 1.このCGIスプリクトはシンプルな雑記帳です # 2.この雑記帳は管理者だけが記事の登録、削除ができます(管理パスワード必須) # 3.この雑記帳は画像をアップロードすることができます(無効にもできます) # 但し、アップロード可能な画像は GIF, JPEG, PNG, BMP のみです # 4.この雑記帳は記事の文字色を選択することができます(無効にもできます) # 5.この雑記帳はタイトルのアイコンを選択することができます(無効にもできます) # 6.この雑記帳は投稿記事に一切のタグを使用できません # また、文字化けの原因となる半角カタカナは使用できません # 但し、URLやメールアドレスを記述するとリンクされます # 7.この雑記帳は投稿ごとに記事を HTMLページとして保存します # 8.この雑記帳はクッキー機能対応です(管理パスワード等が再現されます) # 9.その他、カウンター(GIF画像連結タイプ)が標準添付されています # カウンターの管理モードによりアクセスログの閲覧ができます # #【 設置 】 # 1.必要な下記のライブラリ「cgi-lib.pl」は添付されています # 日本語コード変換ライブラリ「jcode.pl」 # 画像サイズ取得ライブラリ「getpicsize.pl」 # カウンター用のGIF画像連結ライブラリ「gifcat.pl」 # ただし、これらの最新版を利用したい場合は別途ご用意ください # 2.サンプル添付以外のアイコンを使う場合は別途ご用意ください # カウンターに添付されている数字GIF画像以外を使う場合は別途ご用意ください # 3.本体CGIスクリプト「stylenews.cgi」をメモ帳などで開き各種設定事項を書換えて下さい # 特に管理パスワード、著作権表示、管理人ホームページアドレスなどは必ず書換えて下さい # 4.必要に応じて標準添付カウンターの本体CGIスクリプト「stcount.cgi」と # 管理用「stctacc.cgi」の基本事項設定を直接書換えて下さい。(管理パスワード書換必須) # および、管理モードにて環境設定データの内容を必要に応じて変更して下さい # 5.ディレクトリ、ファイル、パーミッションを下記例のように配置します # 特に「アップロード画像用ディレクトリ」と「記事ページ用ディレクトリ」の # パーミッションは読書き可能な[777]に設定する必要があります # 6.ただし、このスプリクトには一般的なログ・ファイルはありません # 投稿した記事は「記事ページ用ディレクトリ」内に HTMLページとして保存されます # #【 利用 】 # 1.著作権表示は必ず必要です。改造して個人で利用する場合も必要です # また、改造したものを再配布するには「改造再配布規定(arange.txt)」を熟読ください # 2.その他、ご利用の注意事項は同梱された「利用規定(kitei.txt)」を熟読ください # 3.スクリプトをダウンロードした場合、無条件にこれらの規定に同意したものとみなします # #【 配置例A 】制限の無い一般的なサーバーの場合 # public_html(ホーム・ディレクトリ) # | # +- stylenews0145b [755] STYLE NEWS用ディレクトリ #   |    stylenews.cgi [755](アスキー転送) 本体CGIスクリプト #   |    stylenews.css [644](アスキー転送) スタイルシート定義 #   |    cgi-lib.pl  [644](アスキー転送) CGIライブラリ #   |    jcode.pl   [644](アスキー転送) 日本語コード変換ライブラリ #   |    getpicsize.pl [644](アスキー転送) 画像サイズ取得ライブラリ(改) #   |    index.html  [644](アスキー転送) ダミーページ #   +- imgs [755] 背景画像、アイコン用ディレクトリ #   |    icon1.gif,・・・,icon6.gif [644](バイナリ転送) 背景画像、アイコン #   +- upimgs [777] アップロード画像用ディレクトリ(読書実行が可能な 777 などパーミッションに設定) #   | #   +- log [777] 投稿記事ページ用ディレクトリ(読書実行が可能な 777 などパーミッションに設定) #   | # カウンター(StyleCounterver0.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画像 # # #【 配置例B 】CGI設置が別の専用サーバーの場合 # CGIを設置するディレクトリ(cgi-binなど)が決まっていて、そこに画像等を設置しても呼び出せない場合 # html(ホームディレクトリ) # | # +- stylenews0145b [755] STYLE NEWS用ディレクトリ #   |    stylenews.css [644](アスキー転送) スタイルシート定義 #   +- imgs [755] 背景画像、アイコン用ディレクトリ #   |    icon1.gif,・・・,icon6.gif [644](バイナリ転送) 背景画像、アイコン #   +- upimgs [777] アップロード画像用ディレクトリ(読書実行が可能な 777 などパーミッションに設定) #   | #   +- log [777] 投稿記事ページ用ディレクトリ(読書実行が可能な 777 などパーミッションに設定) # # cgi-bin( CGI専用ディレクトリ) # | # +- stylenews0145b [755] STYLE NEWS用ディレクトリ #   |     stylenews.cgi [755](アスキー転送) 本体CGIスクリプト #   |     cgi-lib.pl  [644](アスキー転送) CGIライブラリ #   |     jcode.pl   [644](アスキー転送) 日本語コード変換ライブラリ #   |     getpicsize.pl [644](アスキー転送) 画像サイズ取得ライブラリ(改) #   | # カウンター(StyleCounterver0.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] カウンタ画像用ディレクトリ( GIF画像連結タイプは、画像はこちらに配置する) #         0.gif、1.gif、...9.gif [644](バイナリ転送) 数字GIF画像 # #【 謝辞 】 # 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-2003 cachu # #【 履歴 】 # 1. 2003/10/08:Ver0.14b 初版 # 2. 2003/10/10:Ver0.141b ニュース・リスト修正(@nifty対策)など # 3. 2003/10/11:Ver0.142b 画像アップ、アイコン、文字色の使用無効など # 4. 2003/10/15:Ver0.143b リスト、タイトル、クッキー、管理パスワード等の修正 # 5. 2003/10/18:Ver0.144b 投稿削除方式の変更など # 6. 2003/11/10:Ver0.145b 最初の記事表示の訂正、記事日付リスト方式の変更など # ////////////////////////////////////////////////////////////////////// ver # スプリクトバージョン $ver = 'Style News Ver0.145b at2003.11.10'; # ライブラリ設定 require './getpicsize.pl'; # 画像サイズ取得ライブラリ(改) Copyright(c) 2001-2003 cachu require './cgi-lib.pl'; # CGIライブラリ Copyright (c) 1993-1999 Steven E. Brenner require './jcode.pl'; # 日本語コード変換ライブラリ Copyright(c) 1995-1999 Kazumasa Utashiro # ////////////////////////////////////////////////////////////////////// INI # ////////////////////////////////////////////////////////////////////// # # これより以降の各種設定値を必要に応じて直接書換えて下さい # # シフトJISコードで文字化けする次の文字を使う場合は \ を後ろに付けます # ソ噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭 # # ////////////////////////////////////////////////////////////////////// # ■ 基本設定 ■ # CGI設置が別の専用サーバーの場合。または CGIを設置するディレクトリ(cgi-binなど)が決まっていて、ここに画像等を設置しても呼び出せない場合は、 # 以下の設定には相対パスではなく、絶対パス( http:// から始まるURLのフルパスや、/ から始まるフルパス」)を設定して下さい。 $admin_password = 'koriyufu'; # 管理パスワード(英数 8文字以下、必ず変更して下さい) $cookie_id = 'stylenews'; # クッキー識別子名( 'stylenews' など、クッキーを保持しない場合には '' とする) $cookie_hold = 30; # クッキー保持日数( 30 日程度 ) $self_file = './stylenews.cgi'; # このCGIスクリプトファイル $self_file_log = '../stylenews.cgi'; # 投稿記事ページから、このCGIスクリプトファイル $style_css = './stylenews.css'; # ページからのスタイルシート呼出用ファイル $style_css_log = '../stylenews.css'; # 投稿記事ページからのスタイルシート呼出用ファイル $imgs_url = './imgs/'; # ページからのアイコン画像呼出用ディレクトリ $imgs_url_log = '../imgs/'; # 投稿記事ページからのアイコン画像呼出用ディレクトリ $upimg_dir = './upimgs/'; # CGIからの画像アップロード用ディレクトリ( http://から始まるURLではない) $upimg_url = './upimgs/'; # ページからのアップロード画像呼出用ディレクトリ $upimg_url_log = '../upimgs/'; # 投稿記事ページからのアップロード画像呼出用ディレクトリ $vewlog_dir = './log/'; # CGIからの投稿記事ページ用ディレクトリ( http://から始まるURLではない) $vewlog_url = './log/'; # ページからの投稿記事ページ呼出用ディレクトリ # ■ 付属カウンター設定 ■ $counter_dir = ''; # カウンタ設置のディレクトリ( './count/' など、カウンターを使用しない場合には '' とする) $counter_name = 'stcount.cgi'; # カウンタ本体CGIのスクリプト名 $counter_admin = 'stctacc.cgi'; # カウンタ管理CGIのスプリクト名 # ■ 著作権表示の設定 ■ $matreal_name = ''; # 画像素材の著作者名(必要ない場合には '' とする) $matreal_url = ''; # 画像素材の著作サイトURL(必要ない場合には '' とする) $arange_name = ''; # アレンジ(改造)の著作者名(必要ない場合には '' とする) $arange_url = ''; # アレンジ(改造)の著作サイトURL(必要ない場合には '' とする) $sprict_name = 'CGI-Style'; # スプリクトの著作権者名(削除不可) $sprict_url = 'http://cgistyle.net/'; # スプリクトの著作権サイトURL(削除不可) # ■ 環境設定 ■ $admin_home = ''; # 管理人HPリンクのアドレス(使用しない場合には '' とする) $admin_home_target = ''; # 管理人HPリンクのターゲット指定('_self'、'_blank'、'_parent'、'_top'など) $notitle = ''; # 記事のタイトルが未記入の場合の表示(何も表示しない場合には '' とする) $up_imgs_um = 'yes'; # 画像アップロード機能の使用有無(使用しない場合は '' とする) $maxdatakb = '30'; # 投稿(画像+記事)受理最大データサイズ( 30 〜 60KB程度 ) $full_size = ''; # アップロード画像の表示モード('full':フルサイズ表示、'':縮小表示) $max_w = '120'; # アップロード画像表示の横幅最大値(これを越えるものは縮小表示されます) $max_h = '120'; # アップロード画像表示の高さ最大値(これを越えるものは縮小表示されます) $text_colors_um = 'yes'; # 記事文字色の使用有無(使用しない場合は '' とする) @text_colors = ('#4444FF','#CC4444','#448844','#884444','#CC44CC','#FF88CC','#FF8844'); # 記事文字色コード $view_icons_um = 'yes'; # 記事表示アイコンの使用有無(使用しない場合は '' とする) @view_icons = ('icon1.gif','icon2.gif','icon3.gif','icon4.gif','icon5.gif','icon6.gif'); # 記事表示アイコン $table_width = '95%'; # 投稿表示テーブル幅サイズ(ピクセル実数値、または%値) $body_topmargin = '0'; # ページの上部マージンサイズ(通常は '0' ) $body_leftmargin = '0'; # ページの左部マージンサイズ(通常は '0' ) $body_txt = ''; # ページのテキスト色(スタイルシートファイルの定義が優先します) $body_bgcolor = ''; # ページ全体の背景色(スタイルシートファイルの定義が優先します) $body_bg_gif = ''; # ページ全体の背景画像(スタイルシートファイルの定義が優先します) $frame_top_height = '36'; # 上フレーム部・高さサイズ $frame_left_width = '160'; # 左フレーム部・横幅サイズ $partition_color = '#c6c6e6'; # フレーム間の仕切りラインの色 $border_list_menu = '
'; # 左フレームの日付リスト部の上下のライン $border_show_one = '
'; # 右フレームの記事表示部のタイトルと記事のライン $border_show_delete = '
'; # 右フレームの削除記事のライン $news_name = 'Style News'; # プラウザに表示されるタイトル $title_moji = 'マネージャーのお気に入り'; # 雑記帳のタイトル文字 $title_gif = 'title.gif'; # 雑記帳のタイトル画像(画像の指定が優先されます) $help_title = 'Help'; # 使用説明モードのアンカータイトル表示文字 $help_label = 'HELP'; # 使用説明モードのアンカー文字 $help_gif = ''; # 使用説明モードのアンカー画像(画像の指定が優先されます) $admin_home_title = 'Home'; # 管理人ホームページのアンカータイトル表示文字 $admin_home_label = 'HOME'; # 管理人ホームページのアンカー文字 $admin_home_gif = ''; # 管理人ホームページのアンカー画像(画像の指定が優先されます) $mode_label = 'Mode >>'; # 記事の登録、削除選択欄のラベル文字 $pass_label = 'Pass'; # 管理パスワード入力欄のラベル文字 $input_label = 'input'; # 管理用セレクトメニューの入力表示文字 $delete_label = 'delete'; # 管理用セレクトメニューの削除表示文字 $midashi_adminonly = '** Admin Only **'; # 管理人専用のラベル文字 $submit_input_label = 'GO'; # 記事の登録、削除用のサブミットボタン表示文字 $submit_write_label = 'Write'; # 記事登録実施のサブミットボタン表示文字 $submit_omit_label = 'Delete'; # 記事削除実施のサブミットボタン表示文字 $input_area_date = 'Date'; # 記事入力部の日付表示文字 $input_area_year = ' Y'; # 記事入力部の年の表示文字 $input_area_month = ' M'; # 記事入力部の月の表示文字 $input_area_day = ' D'; # 記事入力部の日の表示文字 $input_area_subject = 'Title'; # 記事入力部の題名のタイトル表示文字 $input_area_message = 'Mess'; # 記事入力部の記事のタイトル表示文字 $input_area_color = 'Color'; # 記事入力部の文字色のタイトル表示文字 $input_area_icon = 'Icon'; # 記事入力部のアイコンのタイトル表示文字 $input_area_upimge = 'Image'; # 記事入力部のアップロード画像のタイトル表示文字 $midashi_list = '** News List **'; # 左側フレームの記事日付リストの見出文 $midashi_input = '** News Input **'; # 記事入力実施画面の見出文 $midashi_delete = '** News Delete **'; # 記事削除実施画面の見出文 # ////////////////////////////////////////////////////////////////////// MAIN # /////////////////////////////////////////////////////////////////////////// # # 注意:これ以降の記述を変更した場合はスプリクトの改造(アレンジ)となります。 # #    改造して個人で利用することは許可無くまったく自由でが、 #    改造したものを再配布する場合には事前の許可が必要です。 # # /////////////////////////////////////////////////////////////////////////// # (記事+画像)受理最大サイズ(バイト値)設定 $cgi_lib'maxdata = 1024 * $maxdatakb; # 添付可能画像の説明文の設定 $input_upimge_type = 'GIF,JPG,PNG,BMP'; $mas_input = "$maxdatakb kB以下の画像($input_upimge_type)を添付できます"; # 記事削除の説明文の設定 $mas_delete = "削除したい記事を1個だけ選んで下さい"; # カウンタURL、管理モード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 ($help_gif) { $help_gif_url = $imgs_url . $help_gif; } if ($admin_home_gif) { $admin_home_gif_url = $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'}; # クッキー情報取得 &get_cookie(); $view_icon = $cookie{'view_icon'}; $text_color = $cookie{'text_color'}; if($cookie_id){ $password = $cookie{'password'}; } else{ $password = ''; } # ログのHTMLファイル名検索 $tmp = "$vewlog_dir"."*.html"; $_ = `echo $tmp`; $_ =~ tr/ \t\r\f/\n\n\n\n/; @logs_files = split(/\n/,$_); @logs_files_sort = sort {$b cmp $a} @logs_files; $logs_files_new = @logs_files_sort[0]; $logs_files_new =~ s/$vewlog_dir//i; if($logs_files_new eq "*.html") {$logs_files_new = '';} else { $logs_files_new = "$vewlog_url$logs_files_new"; } # POST&GETデータ取得 # デコード処理 &decode; # 受取モードを変数に設定 if( $in{'job'} eq 'ver' ) { $mode = 'ver'; &show_ver;} # verページ表示処理 elsif( $in{'job'} eq 'help' ) { $mode = 'help'; &show_help; } # HELPページ表示処理 elsif( $in{'job'} eq 'title' ) { $mode = 'title'; &show_title; } # titleページ表示処理 elsif( $in{'job'} eq 'list' ) { $mode = 'list'; } # listページ表示処理 elsif( $in{'job'} eq 'input' ) { $mode = 'input'; } # 投稿入力処理 elsif( $in{'job'} eq 'write' ) { $mode = 'write'; } # 記事書込実行 elsif( $in{'job'} eq 'omit' ) { $mode = 'omit'; } # 記事削除処理 elsif( $in{'job'} eq 'del' ) { $mode = 'del'; } # 記事削除実行 else { &start; } # 記事チェック 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; } } # HTMLファイル操作 if( $mode eq 'write'){ &make_html; } elsif($mode eq 'del' ){ &del_html; } # 管理パスワードのチェック if( $password_error ) { &show_error( '管理パスワードが違います。' ); } # HTMLファイル操作後の再読込 $tmp = "$vewlog_dir"."*.html"; $_ = `echo $tmp`; $_ =~ tr/ \t\r\f/\n\n\n\n/; @logs_files = split(/\n/,$_); @logs_files_sort = sort {$b cmp $a} @logs_files; $logs_files_new = @logs_files_sort[0]; $logs_files_new =~ s/$vewlog_dir//i; if($logs_files_new eq "*.html") {$logs_files_new = '';} else { $logs_files_new = "$vewlog_url$logs_files_new"; } # 各処理実施 if( $mode eq 'list' ) { &show_list; } elsif($mode eq 'input') { $job = 'write'; &show_input; } elsif($mode eq 'write') { &start; } elsif($mode eq 'omit') { $job = 'del'; &show_omit; } elsif($mode eq 'del') { &start; } else { &start; } # メイン終了 exit; # /////////////////////////////////////////////////////////////////////// SUB # 雑記帳の表示 sub start { $frame_left_width_plase20 = $frame_left_width + 20; print "content-type: text/html\n\n"; print < $news_name <body><p>このページにはフレームが使用されていますが、お使いのブラウザではサポートされていません。</p></body> HTML_END exit; } # 雑記帳のタイトルを表示(上部フレーム表示) sub show_title { # リンク作成 $make_home_link = &make_home_link( $admin_home, $admin_home_target, $admin_home_title, $admin_home_label, $admin_home_gif_url ); $make_help_link = &make_job_link( "help", $help_title, $help_label, $help_gif_url ); print "Content-type: text/html\n\n"; print < $news_name
  $make_home_link HTML_END if( $title_gif ) { print "\t\t"; } else { print "\t\t$title_moji"; } print <$make_help_link HTML_END # カウンター設置 if($counter_dir){print "\t\t";} print <
HTML_END exit; } # 記事日付リスト部の表示(左部フレーム表示) sub show_list { # 著作者リンク作成 $make_matreal_link = &make_copyright_link( "Matreal", $matreal_url, $matreal_name ); $make_arange_link = &make_copyright_link( "Arange", $arange_url, $arange_name ); $make_sprict_link = &make_copyright_link( "Sprict", $sprict_url, $sprict_name ); print "Content-type: text/html\n\n"; print < $news_name
$midashi_list
HTML_END # 今日の年月日取得 ( $yyyymmdd, $hhmmss, $yyyy, $mm, $dd, $youbi ) = &gettime(); # リスト表示する記事の年月 if($in{'y'}){ $view_yyyy = $in{'y'}; }else{ $view_yyyy = $yyyy; } if($in{'m'}){ $view_mm = $in{'m'}; } else{ $view_mm = $mm; } foreach $logs_name ( @logs_files_sort ) { $logs_date = $logs_name; $logs_date =~ s/$vewlog_dir//; $logs_file_name = $logs_date; $logs_url = "$vewlog_url$logs_date"; $logs_date =~ s/.html//; $logs_date =~ s/\*//; if( $logs_date ) { ( $log_year, $log_month, $log_day, ) = split( /_/, $logs_date ); $tmp_ym = "$log_year$log_month"; if( ($log_year eq $view_yyyy) && ($log_month eq $view_mm) ){ @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[$log_month - 1]; $e_wday = @WeekName[&getweekday($log_year, $log_month, $log_day) - 1]; print"\t\t\t\t\n"; print"\t\t\t\t\n"; } elsif( $old_ym ne $tmp_ym ){ print"\t\t\t\t\n"; print"\t\t\t\t\n"; } $old_ym = $tmp_ym; } } print <
$border_list_menu
$log_year\/$log_month\/$log_day\($e_wday\)
$log_year\/$log_month ・・・   
$border_list_menu
$midashi_adminonly
$mode_label 
$pass_label 
$make_matreal_link
$make_arange_link
$make_sprict_link
HTML_END exit; } # 記事入力部の表示 sub show_input { # パスワード認証 if ($admin_password ne "$in{'password'}") { &show_error( "パスワードが違います。" ); } # 今日の年月日取得 ( $yyyymmdd, $hhmmss, $yyyy, $mm, $dd, $youbi ) = &gettime(); # 表示部のヘッダの表示 print "Content-type: text/html\n\n"; print < $news_name
$midashi_input
HTML_END # 記事アイコンの選択 if ( $view_icons_um ) { print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; } print < HTML_END # 記事文字色の選択 if ( $text_colors_um ) { print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; } # 画像アップロードの選択 if ( $up_imgs_um ) { print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; } print <
$mas_input
$border_show_delete
$input_area_date $input_area_year   $input_area_month   $input_area_day
$input_area_icon"; foreach $icon ( @view_icons ) { if( $view_icon eq $icon ) { print "\t\t\t\n"; } else { print "\t\t\t\n"; } } print "\t\t\t
$input_area_subject
$input_area_message
$input_area_color"; foreach $color ( @text_colors ) { if( $text_color eq $color ) { print "\t\t\t"; } else { print "\t\t\t"; } } print "\t\t\t
$input_area_upimge
$border_show_delete
Back
HTML_END exit; } # ログHTML生成処理 sub make_html { # パスワード認証 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; # 投稿日時設定 ( $yyyymmdd, $hhmmss, $yyyy, $mm, $dd, $youbi ) = &gettime(); $today = $yyyymmdd . '-' . $hhmmss; # 投稿年月日設定 $year = sprintf( "%04d", $in_year ); $month = sprintf( "%02d", $in_month ); $day = sprintf( "%02d", $in_day ); # 投稿記事の改行タグ変換 $text =~ s/\r?\n/
/g; # ヘッダー部生成 $html = ''; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "$news_name\n"; $html .= "\n"; $html .= "\n"; #ボディー部生成 $html .= "\n"; $html .= "
\n"; $kiji_y = $year; $kiji_m = $month; $kiji_d = $day; $text = &change_special_to_view($text); if(!$text_color) { $text_color = ''; } if(!$view_icon) { $view_icon = ''; } @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 .= "\n"; $html .= "
"; if($text_color){ $html .= ""; } if($view_icon){ $html .= ""; } $html .= "$subject  "; $html .= "$kiji_y $e_month $kiji_d ($e_wday)  "; if($text_color){ $html .= ""; } $html .= "
$border_show_one
"; if($text_color){ $html .= ""; } $html .= "$text"; if($text_color){ $html .= ""; } $html .= "
"; 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ファイル名設定 $html_file_name = "$kiji_y\_$kiji_m\_$kiji_d\.html"; $html_file = "$vewlog_dir$html_file_name"; # HTMLファイル保存 open(HTMLFILE,">$html_file") || &show_error("file [ $html_file ] open error."); print HTMLFILE $html; close(HTMLFILE); } # 記事入力部の表示 sub show_omit { # パスワード認証 if ($admin_password ne "$in{'password'}") { &show_error( "パスワードが違います。" ); } # 表示部のヘッダの表示 print "Content-type: text/html\n\n"; print < $news_name
$midashi_delete
HTML_END foreach $logs_name ( @logs_files_sort ) { $logs_date = $logs_name; $logs_date =~ s/$vewlog_dir//; $logs_file_name = $logs_date; $logs_url = "$vewlog_url$logs_date"; $logs_date =~ s/.html//; $logs_date =~ s/\*//; if( $logs_date ) { ( $log_year, $log_month, $log_day, ) = split( /_/, $logs_date ); @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[$log_month - 1]; $e_wday = @WeekName[&getweekday($log_year, $log_month, $log_day) - 1]; print"\t\t\t\t\n"; print"\t\t\t\t\n"; } } print <
$mas_delete
$border_show_delete
 $log_year\/$log_month\/$log_day\($e_wday\)
$border_show_delete
Back
HTML_END exit; } # 記事削除実施 sub del_html { # パスワード認証 if ($admin_password ne "$in{'password'}") { &show_error( "パスワードが違います。" ); } # 削除するhtmlファイル名の設定 $delete_html_file = $in{'file'}; # 添付画像ファイル名の設定 $_ = ''; open(HTMLFILE,"$vewlog_dir$delete_html_file") || &show_error("file [ $html_file ] open error."); while($tmp = ) {$_ .= $tmp;} close(HTMLFILE); $_ =~ m/($upimg_url_log)(\d+)\.([a-z]+)/i; $delete_upimg_file = $2 . '.' . $3; # 記事HTMLファイルの削除 if ( not -e "$vewlog_dir$delete_html_file" ) { &show_error( "該当する記事HTMLファイルがありません。" ); } else { unlink "$vewlog_dir$delete_html_file" || &show_error( "記事HTMLファイルを削除できませんでした。" ); } # 添付画像があれば削除 if( -e "$upimg_dir$delete_upimg_file") { unlink "$upimg_dir$delete_upimg_file"; } } # 雑記帳の使用説明ページを表示 sub show_help { print "Content-type: text/html\n\n"; print < $news_name

          ** ご案内 **

●記事を閲覧するには左側の記事日付をクリックします

●この雑記帳は管理者のみ記事を登録・削除できます
  左側下部にあるセレクトメニューを選択して、
  管理パスワードを入力して、$submit_input_label をクリックします
HTML_END if ( $up_imgs_um ) { print "
●PC内にある画像をアップロードすることができます
   画像ファイル : $input_upimge_type 限定
   画像データ量 : $maxdatakb キロバイト以下
   表\示サイズ : $max_w × $max_h ピクセル
   表\示サイズを越えるものは縮小表\示され、
   サブウインドウで原寸表\示します
\n";} if ( $text_colors_um ) { print "
●投稿の際、記事の文字色を選択することができます
\n";} if ( $view_icons_um ) { print "
●投稿の際、タイトル・アイコンを選択することができます
\n";} print < ●記事には一切のタグは使用できません
  ただし、URLやメールアドレスがあるとリンクされます
  文字化けの原因となる半角カタカナは使用できません

●クッキー対応です。管理パスワード等が保持されます

HTML_END exit; } # このスプリクトの名称、バージョンを表示 sub show_ver { print "Content-type: text/html\n\n"; print < $news_name

Sprict Name,Ver

$ver

HTML_END exit; } # エラーメッセージ表示 sub show_error { local($error_msg) = @_; print "Content-type: text/html\n\n"; print < $news_name Error
エラー
$error_msg
Back
HTML_END exit; } # ジョブ用リンク作成 sub make_job_link { local($job, $job_title, $job_label, $job_gif ) = @_; if( $job_gif ) { return ""; } else { return "$job_label"; } } # HOMEリンク作成 sub make_home_link { local( $home, $home_target, $home_title, $home_label, $home_gif ) = @_; if( $home ) { if( $home_gif ) { return ""; } else { return "$home_label"; } } else { return ''; } } # 著作権表示リンク作成 sub make_copyright_link { local( $copyright, $copyright_url, $copyright_name ) = @_; if( $copyright_name ) { if( $copyright_url ) { return "$copyright_name"; } else { return "$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 * $cookie_hold ); 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; } # 記事内にある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; } $in{'url'} =~ s/^http\:\/\///; if ($in{'subject'} eq "") { $in{'subject'} = $notitle; } } # 文字列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__