Welcome! |
ここは、MMORPG Ragnarok Online の Alvitr サーバ(旧 Bijou)で活動するギルドのHPです。
のんびり、マターリ、ときには必死に、適度に馴れ合い、ほどほどに放置しつつ、
みんなでわいわい楽しく話せるようなギルドにしたいと思っています。
あなたは、#!/usr/local/bin/perl
#↑Perlのパスをサーバに合わせて記述。
use lib ".";
#このファイルはSSIタグによって呼出します。
# ↓定義
#-----------------------------------------------------------------------------#
package AppsPage::Includecntdx::Counter;
my $define = {};
#++++++++++++++++++++++++++++++++#
# 定義の目次
#++++++++++++++++++++++++++++++++#
# 1:ファイル構成図
# 2:基本設定
# 3:呼出しタグとSSIに関する補足
# 4:設置環境設定
#++++++++++++++++++++++++++++++++#
#【1:ファイル構成図】
#-----------------------------------------------------------------------------#
#
# public_html/
# │
# ├ index.shtml …………………………… (755) カウンタ呼出しHTML
# │(または、index.html)
# │
# └ includecntdx/ ………………………… (755) プログラムディレクトリ
# ├ include.cgi ……………………… (755) このファイル。
# └ (以下略)
#
#【2:基本設定】
#-----------------------------------------------------------------------------#
# ■ファイルロック方法
# '0' mkdir関数 / flock関数が使えないサーバ専用
# '1' flock関数 / *標準
# '2' ロックしない
$define->{'LOCK_METHOD'} = '1';
# ■HTTPヘッダ(通常空欄)
# "Content-Type: text/html\n\n" や、
# "Content-Type: text/plain\n\n"
# などの設定にしないと動作しないサーバもあります。
$define->{'HTTP_HEADER'} = "Content-Type: text/html\n\n";
# ■カウンタ画像ディレクトリのURL(ブラウザでアクセス可能なアドレス)
# 呼出し元ファイルから見たアドレスまたは、URL。
# ※上記のファイル構成図を想定して、標準設定してあります。
# ※ファイル構成図以外の方法で設置した場合、「http://〜」で設定して下さい。
$define->{'IMG_ADDR'} = 'imgs/';
# ■ライブラリディレクトリ
# ※上記のファイル構成図を想定して、標準設定してあります。
# ※ファイル構成図以外の方法で設置した場合、絶対パスで設定して下さい。
$define->{'LIB_DIR'} = 'lib/';
# ■データ記録ディレクトリ
# ※上記のファイル構成図を想定して、標準設定してあります。
# ※ファイル構成図以外の方法で設置した場合、絶対パスで設定して下さい。
$define->{'DATA_DIR'} = 'data/';
# ■ロックディレクトリ
# ※上記のファイル構成図を想定して、標準設定してあります。
# ※ファイル構成図以外の方法で設置した場合、絶対パスで設定して下さい。
$define->{'LOCK_DIR'} = 'lock/';
# ■作業用ディレクトリ
# ※上記のファイル構成図を想定して、標準設定してあります。
# ※ファイル構成図以外の方法で設置した場合、絶対パスで設定して下さい。
# 通常、データ記録ディレクトリと同じ。
$define->{'TMP_DIR'} = 'data/';
# ※基本的な設定はここまでです。
#【3:呼出しタグとSSIに関する補足】
#-----------------------------------------------------------------------------#
# ファイル構成図どおりに設置した場合は、次のいずれかのタグを
# index.shtml(または、index.html)に貼付けてカウンタを呼び出します。
#
# 例1
#
# 例2
#
# 例3
#
#
# ファイル構成図以外の方法で設置した場合は、次のタグを参考にどうぞ。
# 管理用ページ(index.cgi)でも、呼出しタグ見本を表示できます。
#
# 例1
#
# 例2
#
# 例3
#
# SSIに関する補足
#
# ・SSIを呼出し可能なHTMLファイルの拡張子はサーバごとに異なります。
#
# ・呼出しタグはサーバごとに異なります。
#
# ・ファイルやディレクトリのパス指定はCGIと異なるので「絶対パス」が無難です。
#
# ・複数のSSIタグを同時に埋込む場合、最初の呼出しプログラムと2度目以降の呼出し
# プログラムの設定が異なるサーバがあります。この場合、最初に呼出したプログラム
# または、2度目以降に呼出したプログラムの「Content-Type」など、ヘッダ出力部分
# を加える必要があるかもしれません。どこをどのように変更するかは、サーバごとに
# 大きく異なります。
#
# ・その他特殊な仕様が求められるサーバもあります。この場合、サーバの仕様に従い、
# このファイルを改造する必要があるかもしれません。
#
#【4:設置環境設定】
#-----------------------------------------------------------------------------#
#
# 以下のの設定項目で、セキュリティ強化や、設置環境特有の状態に変更できますが、
# 分からない場合、変更しない方が無難です。
#
# ▼セキュリティ強化
# ■suExec環境オプション('0'#標準 / '1' suExec環境限定)
# '0'#標準の場合、データファイルパーミッションは常に666です。
# '1'を設定した場合、更新時、元のパーミッションを引継ぐか、644です。
# ※分からない方、suExec環境でない方は、『絶対に』変更しないで下さい。
$define->{'SU_MODE'} = '0';
# ▼flock関数の因数(通常変更不要)
# ■排他ロック
$define->{'LOCK_EX'} = '2';
# ■アンロック
$define->{'LOCK_UN'} = '8';
#=============================================================================#
#
# これ以下は、変更の必要ありません。
#
#=============================================================================#
sub new { return bless $define; }
# ↓主な処理
#-----------------------------------------------------------------------------#
package AppsPage::Includecntdx::Counter::Countup;
#use strict;
my $this = new();
$this->start;
$this->stop;
sub new {
my $this = new AppsPage::Includecntdx::Counter::;
return bless $this;
}
# →処理開始
sub start {
my $this = shift;
#基本的なライブラリ
require($this->{'LIB_DIR'}.'modus/OO.cgi');
require($this->{'LIB_DIR'}.'modus/TytiCnt2.cgi');
require($this->{'LIB_DIR'}.'modus/Filelock.cgi');
#ファイルロック
$this->{'lock'} = new AppsPage::Includecntdx::Filelock::(
$this->{'LOCK_METHOD'},
$this->{'LOCK_DIR'},
'flock',
$this->{'LOCK_EX'},
1,
$this->{'LOCK_UN'}
);
#カウンタ
$this->{'counter'} = new AppsPage::Includecntdx::TytiCnt2::(
$this->{'DATA_DIR'}.'counter.cgi',
);
########## 区切 ##########
my $check;
#カウンタの処理
if( $this->{'lock'}->lock('EX') ) {
$check = $this->{'counter'}->doCount;
if( $check eq 2) {
#日付更新
require($this->{'LIB_DIR'}.'mode/m_cntupd.cgi');
if( !$this->doUpdate ) { $this->error(''); }
}
$this->{'lock'}->unlock;
}
else { $this->error(''); }
########## 区切 ##########
#カウンタ出力
if($check) {
$this->outHeader;
my( $komma, $days_fig, $total_fig, $html_code, $use_img) = split(
/<>/, $this->{'counter'}->{'result'}->{'info'}
);
my $tday = $this->{'counter'}->{'result'}->{'tday'};
my $yday = $this->{'counter'}->{'result'}->{'yday'};
my $total = $this->{'counter'}->{'result'}->{'total'};
if(!$use_img) {
if( $komma ) {
while( $tday =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g ) { next;}
while( $yday =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g ) { next; }
while( $total =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g ) { next; }
}
else {
$tday = sprintf('%0'.$days_fig.'d',$tday);
$yday = sprintf('%0'.$days_fig.'d',$yday);
$total = sprintf('%0'.$total_fig.'d',$total);
}
}
else {
$tday = sprintf('%0'.$days_fig.'d',$tday);
$yday = sprintf('%0'.$days_fig.'d',$yday);
$total = sprintf('%0'.$total_fig.'d',$total);
my ($i,$tday_img, $yday_img, $total_img);
for($i = 0; $i < length($tday); $i++ ) {
$tday_img .=
' '
;
}
$tday = $tday_img;
for($i = 0; $i < length($yday); $i++ ) {
$yday_img .=
' '
;
}
$yday = $yday_img;
for($i = 0; $i < length($total); $i++ ) {
$total_img .=
' '
;
}
$total = $total_img;
}
$html_code =~ s/\t/ /g;
$html_code =~ s/\$\(tday\)/$tday/g;
$html_code =~ s/\$\(yday\)/$yday/g;
$html_code =~ s/\$\(total\)/$total/g;
print "$html_code";
}
#エラー出力
else { $this->error(''); }
}
# →HTTPヘッダ
sub outHeader {
my $this = shift;
if( $ENV{'SCRIPT_NAME'} =~ /nph\-[^\/\\]+$/ ||
( $ENV{'MOD_PERL'} && $ENV{'PERL_SEND_HEADER'} ne 'On' )
) {
print "HTTP/1.1 200 OK\n";
}
print "$define->{'HTTP_HEADER'}";
}
# →終了
sub stop {
my $this = shift;
$this->{'lock'}->unlock;
exit(0);
}
# →エラー
sub error {
my $this = shift;
$this->{'lock'}->unlock;
$this->outHeader;
print "";
$this->stop;
}
0;
人目のお客様です。
|
Notice for members! |
[>アカウントハッキングに注意しましょう。
不要なURLをクリックしない。など、各自気をつけよう!
[>集会は毎週土曜日 22:00〜行ってます。
[>メンバー専用ページはここからどうぞ(Member Only)
>メンバーページの入室申請方法などはこちらへどうぞ。
|
update infomation |
#!/usr/local/bin/perl
# ↑あなたが加入しているプロバイダの「perl」言語が使用できる
# パスを指定します。一般的に「#!/usr/local/bin/perl」で大丈夫
#=======================================================================================
# News Version 98.11
#=======================================================================================
#日本語コード変換モジュール
require './jcode.pl';
#---------------------------------------
#メッセージを格納するデータベースファイル
$datafile = 'info.dat';
#---------------------------------------
#ホームページに戻るアドレス
$homepage ='http://ro.kobuma.net/';
#---------------------------------------
#バックグランドの画像ファイル
$bg_gif = '';
#最新記事画像
$new_gif = '../../images/wpe4F.gif';
#---------------------------------------
#管理者削除モードのパスワード
$password = 'aces_guild';
#---------------------------------------
#掲示板の名前
$title = '新着情報';
#---------------------------------------
#バックグランドカラー
$bg_color = '#FFFFFF';
#テキストの文字色
$text_color = '#000000';
#リンク文字色
$link_color = '#000099';
#Vリンク文字色
$vlink_color = '#990000';
#Aリンク文字色
$alink_color = '#009900';
#題名の文字色
$subject_color = '#222266';
#題名のバック色
$subject_bgcolor = '#CCCCFF';
#---------------------------------------
#保存する更新履歴(極端に多くするとパフォーマンスが低下します)
$max = 200;
#---------------------------------------
#1ページに表示する件数
$pagevew = 20;
#---------------------------------------
#タグの使用 1 / 0
$tag = 1;
#---------------------------------------
#タグは自動で付けられるのでそれ以降のヘッダー部
$title_html = <<"TITLE_HTML_END";
更新履歴
TITLE_HTML_END
#=======================================================================================
# 初期設定が必要なのはここまでです。
#=======================================================================================
#日付と時刻を取得して、すべて2桁に統一する
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$day,$month,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$month = sprintf("%02d",$month + 1);
$day = sprintf("%02d",$day);
$wday = ('日','月','火','水','木','金','土') [$wday];
$DATE = "$year/$month/$day";
$agent = $ENV{'HTTP_USER_AGENT'};
$textwidth = 80;
if ($agent =~ /MSIE\ 3/i) { $textwidth = $textwidth * 1.5; }
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'});
} else { $formdata = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$formdata);
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/</g;
$value =~ s/>/>/g;
$value =~ s/=/&eq;/g;
$value =~ s/\n//g;
$value =~ s/\t/ /g;
&jcode'convert(*value,'sjis');
if ($QUERY{$name}) { $QUERY{$name} .= " $value"; }
else { $QUERY{$name} = $value; }
}
if ($QUERY{'button'} ne 'next page') { $QUERY{'pline'} = 0; }
&data_read;
if ($QUERY{'pass'} eq $password && $QUERY{'action'} eq 'regist') {
if ($QUERY{'msg'} ne '') {
if ($QUERY{'subject'} eq "") { &error(bad_subject); }
if ($tag) { $QUERY{'msg'} = &tag_change($QUERY{'msg'}); }
$value = join("\t",
"DATE=$QUERY{'date'}",
"SUBJECT=$QUERY{'subject'}",
"GIF=$QUERY{'gif'}",
"URL=$QUERY{'url'}",
"MSG=$QUERY{'msg'}",
"\n"
);
if ($QUERY{'editcode'} > 0) {
$i = 1;
foreach $line (@DATA) {
if ($i == $QUERY{'editcode'}) {
$line = $value;
last;
}
$i++;
}
} elsif ($QUERY{'ins_code'} > 0) {
$i = 1;
foreach $line (@DATA) {
push(@NEW_DATA, $line);
if ($i == $QUERY{'ins_code'}) {
push(@NEW_DATA, $value);
}
$i++;
}
@DATA = @NEW_DATA;
} else { unshift(@DATA, $value); }
if (&data_save != 1) { &error(bad_save); }
}
} elsif ($QUERY{'pass'} eq $password && $QUERY{'button'} eq '削除') {
if ($QUERY{'code'} > 0) {
$i = 1;
foreach $line (@DATA) {
$j = $i - 1;
if ($i == $QUERY{'code'}) { splice(@DATA, $j, 1); last; }
$i++;
}
if (&data_save != 1) { &error(bad_save); }
} else { &error(bad_code); }
} elsif ($QUERY{'pass'} eq $password && $QUERY{'button'} eq '訂正') {
if ($QUERY{'code'} < 1) { &error(bad_code); }
else {
$i = 1;
foreach $line (@DATA) {
@LINE = split(/\t/,$line);
foreach (@LINE) {
($key, $value) = split(/=/,$_);
$FILE{$key} = $value;
}
if ($i == $QUERY{'code'}) { last; }
$i++;
}
$date = $FILE{'DATE'};
$subject = $FILE{'SUBJECT'};
$gif = $FILE{'GIF'};
$url = $FILE{'URL'};
$msg = $FILE{'MSG'};
$msg =~ s/&eq;/=/ig;
}
&html_head;
&form(edit);
print " | | |