掲示板スクリプトの配布

[ PR ]

■ 実行イメージ

サンプル1(普通)
サンプル2(綺麗な感じ)
サンプル3(携帯用)
サンプル4(縦書き)

サンプル2とサンプル4で使っているアイコンと背景画像は*MKbrandsさんのものを使用しています。 画像の著作権は全て*MKbrandsさんにあります。

■ 特徴など

■ ダウンロード

Ver1.00 bbs.zip

スキンはサンプル1のものがついてきます。
オブジェクト指向のソースです…一応。

■ ダウンロード => スキンファイル

綺麗な感じ(サンプル2のもの)
同梱しているアイコンと背景画像の素材は *MKbrandsさんから許可をもらって再配布しています。 再配布、二次加工はしないでください。 また、こちらの素材の著作権は*MKbrandsさんにあります。 使用する際には*MKbrandsさんの素材利用規約を読んでください。 また、掲示板の*MKbrandsさんの著作権表示部も変更しないでください。
携帯用(サンプル3のもの)

■ 使い方 => ダウンロード〜カスタマイズ〜設置編

まずは解凍
ダウンロードしたら、専用のディレクトリを作成してそこでアーカイブファイルを解凍します。まあ専用のディレクトリを作成しなくてもいいのですが、ファイル数が多いので作成したほうがいいと思います。
ここではbbsというディレクトリに解凍したとして説明します。
	bbsディレクトリに解凍したときの構成状況。

	bbs
	  ┣lock[777](ディレクトリ) ← 環境によって解凍しても生成されないことがあるのでその際は自分で作成してください。
	  ┃
	  ┣data1[755](ディレクトリ)
	  ┃  ┣log[777](ディレクトリ)
	  ┃  ┃  ┗index.html[666]
	  ┃  ┣skin[755](ディレクトリ)
	  ┃  ┃  ┣child.php[644]
	  ┃  ┃  ┣foot.php[644]
	  ┃  ┃  ┣form.php[644]
	  ┃  ┃  ┣head.php[644]
	  ┃  ┃  ┗parent.php[644]
	  ┃  ┣css.css[644]
	  ┃  ┣item.txt[644]
	  ┃  ┗log.log[666]
	  ┃
	  ┣Module[755](ディレクトリ)
	  ┃  ┣DateTime.php[644]
	  ┃  ┣Html.php[644]
	  ┃  ┣IO.php[644]
	  ┃  ┣Iterator.php[644]
	  ┃  ┣Lock.php[644]
	  ┃  ┣Mail.php[644]
	  ┃  ┣Phone.php[644]
	  ┃  ┗Strings.php[644]
	  ┃
	  ┣Bbs[755](ディレクトリ)
	  ┃  ┣Appli.php[644]
	  ┃  ┣Bbs.php[644]
	  ┃  ┣Item.php[644]
	  ┃  ┣Log.php[644]
	  ┃  ┣Message.php[644]
	  ┃  ┗Writeform.php[644]
	  ┃
	  ┣custom.php[644]
	  ┗main.php[644]
	
	★注  [ ]内はパーミッション(サーバによってはこれと違う場合があります)

	たくさんファイルがありますが、実際に自分で管理するファイルは限定されるので
	気負いしなくても大丈夫です。
custom.phpの編集
custom.phpファイルでパスワードと管理者の名前、メール通知の設定を記述します。
このパスワードを使うと全ての記事の修正、削除が行えるので必ず変更しましょう。
管理者の名前は、書き込みした人の名前とこれがいっしょのときメール通知を行いません。
設置
ここまでできたらサーバ側に設置します。↑のパーミッションに注意しながらアップしてください。ファイル数が多いので専用のディレクトリを作成することをオススメします。
後は↓のようなURLにアクセスして書き込みを行えれば設置完了です。
	http://〜/bbs/main.php?fileid=bbs1
最後に自分のサイトに板へのリンクを貼って完了
	<A HREF="http://〜/bbs/data1/log/">掲示板</A>

■ 使い方 => スキン編

ファイルの説明
data1/skin/ディレクトリ下のファイルがスキンファイルです。
  • head.php 閲覧ファイルのヘッダ部分です。
  • foot.php 閲覧ファイルのフッタ部分です。
  • parent.php 閲覧ファイルの親記事部分です。
  • child.php 閲覧ファイルの子記事部分です。
  • form.php 書き込みフォームです。
  • ezform.php ezWeb用書き込みフォームです。携帯用として使う時のみ必要。
スキンファイルはPHPで記述
スキンファイルはPHPで記述します。よって少しPHPの知識がないといけません。

■ 使い方 => スキンテクニック編

相対パスに注意
全スキンファイル 対応

スキンファイル内に相対パスを記述する時は注意が必要です。
	head.php, foot.php, parent.php, child.php
		logディレクトリを基準にする。

	form.php, ezform.php
		bbsディレクトリを基準にする。

IPやホスト名などを表示する
parent.php, child.php 対応

$this->ms配列にメッセージの情報が入っていて$this->item配列には$this->msのどこに何が入っているかの情報が入っています。
	例 : IPとホスト名を表示する

	$buffer .= "IP : " . $this->[$this->item["ip"]] . "<BR>"
	        .  "ホスト名 : " . $this->[$this->item["host"]] . "<BR>";


	表示できるメッセージ情報一覧 :
	($this->ms[$this->item["hoge"]]と使う) :

	id 親記事ID
	reid 子記事ID
	stamp タイムスタンプ
	date 日付
	time 時刻
	ip IP
	host ホスト名
	ua UserAgent

	これプラスitem.txtで設定した記入項目。
	デフォルトで言えば

	name 名前
	message メッセージ
	url URL
	email メールアドレス
	pass パスワード

「過去ログ」と表示する
head.php, foot.php, parent.php, child.php 対応

$this->pastに過去ログのフラグが入っている(過去ログなら 1 現ログなら0)のでif文などを使えば現ログと過去ログでメッセージなどの変更を行うことが出来ます。
	例 :

	if($this->past) {
		$buffer .= "過去ログ";
	} else {
		$buffer .= "現ログ";
	}
過去ログには返信できないので、これを使って過去ログからは返信フォーム(もしくはリンク)を消しましょう。
ページナンバーを表示する
head.php, foot.php 対応

$this->page_noにページ数が入っています(ただし最新ページには0が入っています)。これを使えばページ数を表示できます。
	例 :

	if($this->page_no) {
		$buffer .= $this->page_no . "ページ目";
	} else {
		$buffer .= "最新ページ";
	}
過去ログへのリンクを貼る
head.php, foot.php 対応

$this->past_noに過去ログ数が入っています。これを使えば過去ログへのリンクを表示できます。
	例  :

	for($i = 1; $i <= $this->past_no; $i++)
		$buffer .= "<A HREF=\"" . $i . ".html\">" . $i . " </A>";


	例2 : 過去ログは閲覧専用ということを考慮したもの

	if($this->past) {
		$buffer .= "<A HREF=\"" . ($this->page_no+1) . ".html\">後</A>";
		if($this->page_no > 1)
			$buffer .= "<A HREF=\"" . ($this->page_no-1) . ".html\">前</A>";
	} else {
		for($i = 1; $i <= $this->past_no; $i++)
			$buffer .= "<A HREF=\"" . $i . ".html\">" . $i . " </A>";
	}
1つのスレッドをテーブルで囲む
parent.php 対応

parent.php$bufferはそのスレッドの先頭部分、$buffer2は終わり部分なので以下のようにすれば1つのスレッドごとにテーブルで囲むことが出来ます。
	例 :

	$buffer  .= "<TABLE BORDER=1 CELLSPACING=0><TR><TD>\n";

		〜 中略 〜

	$buffer2 .= "</TD></TR></TABLE>";
新規、レス、修正で表示を変える
form.php, ezform.php 対応

$this->modeにモードのフラグが入っています(新規 => write、 レス => res、 修正 => modify2 )。
	例 :

	if($this->mode == "write") {
		$buffer .= "新規書き込みフォーム";
	} else if($this->mode == "res") {
		$buffer .= "返信フォーム";
	} else if($this->mode == "modify2") {
		$buffer .= "修正フォーム";
	}
名前が無記入の時「名無し」にする
parent.php, child.php 対応
	例 :

	$buffer .= Html::nl2str($this->ms[$this->item["name"]], "名無し");
メールアドレスが記入されていた時のみ名前に<A HREF="mailto:〜">タグを適用する
parent.php, child.php 対応
	例 :

	$buffer .= Html::email2anchor($this->ms[$this->item["email"]], $this->ms[$this->item["name"]], 1);
URLが記入されていた時のみ<A HREF="〜">Homepage</A>と表示する
parent.php, child.php 対応
	例 :

	$buffer .= Html::url2anchor($this->ms[$this->item["url"]], "Homepage", 0);
いわゆるオートリンク
parent.php, child.php 対応
	例 :

	$buffer .= Html::autolink($this->ms[$this->item["message"]], "");

■ 使い方 => 記入項目編

item.txtの編集
data1/ディレクトリ下のitem.txtファイルで記入項目の設定を行います。
	1行ごとに

		ID,名前,無記入OKか,半角での最大文字数,

	と半角カンマ区切りで記入します。

	ID → namemessage など半角英数字で記入。
	      書き込みフォームから
		<INPUT TYPE=text NAME=name>や
		<TEXTAREA NAME=message></TEXTAREA>
	      などと使う。
	名前 → お名前メッセージ など項目名を記入。
	無記入OKか → 0 で無記入OK。 1 で無記入NG。
	半角での最大文字数 → 1001000 など半角での入力文字数上限を記入。


	item.txtの例1:

	記入項目が

	名前(未記入NG 文字数上限100)
	メッセージ(未記入NG 文字数上限400)

	の時

	//------ここから------
	name,名前,1,100,
	message,メッセージ,1,400,
	//------ここまで------


	item.txtの例2:

	記入項目が

	名前(未記入NG 文字数上限100)
	メッセージ(未記入NG 文字数上限1000)
	メールアドレス(未記入OK 文字数上限100)
	URL(未記入OK 文字数上限100)

	の時

	//------ここから------
	name,名前,1,100,
	message,メッセージ,1,1000,
	email,メールアドレス,0,100,
	url,URL,0,100,
	//------ここまで------


	item.txtの例3:

	記入項目が

	名前(未記入OK 文字数上限100)
	メッセージ(未記入NG 文字数上限1000)
	メールアドレス(未記入OK 文字数上限100)
	URL(未記入OK 文字数上限100)
	タイトル(未記入NG 文字数上限100)
	アイコン(未記入OK 文字数上限100)
	削除修正用パスワード(未記入NG 文字数上限8)

	の時

	//------ここから------
	name,名前,0,100,
	message,メッセージ,1,1000,
	email,メールアドレス,0,100,
	url,URL,0,100,
	title,タイトル,1,100,
	icon,アイコン,0,100,
	pass,削除修正用パスワード,1,8,
	//------ここまで------

記入項目を追加などしたら、当然スキンファイルも修正しないと行けません。
削除修正用パスワード
削除修正用パスワードのIDは必ずpassにしてください。
特殊なID
IDにある単語で始まるものを指定すると記入された内容に対して特殊な動作を行います。
	特殊なID一覧 :

	url URLかどうかチェックする
	email メールアドレスかどうかチェックする
	pass md5()で暗号化する
ある単語で始まるとは、例えばurlだけでなくurl1urlhogeなどなどです。

■ 使い方 => 応用編

アイコンの使用
まずはアイコン用の画像を素材サイトからダウンロードしたり自分で作ったりします。
説明用にここでは以下のアイコンを用意したとします。
	ファイル名 : アイコンの説明

	icon1.gif : 男の子のアイコン
	icon2.gif : 女の子のアイコン
	icon3.gif : 柴犬のアイコン
	icon4.gif : 豆柴のアイコン
そしてdata1/ディレクトリ下にimgというディレクトリを作成してそこにアイコン用画像をアップします。

次にitem.txtを編集します。item.txtに以下の一行を追加します。
	icon,アイコン,0,100,
次にアイコン記入欄を作るためにform.phpを編集します。一般的にアイコンは<SELECT>タグで指定するようなのでここでもそのようにします。
	$buffer .= "<SELECT NAME=icon>
	            <OPTION VALUE=\"\">なし</OPTION>
	            <OPTION VALUE=\"icon1.gif\">男の子のアイコン</OPTION>
	            <OPTION VALUE=\"icon2.gif\">女の子のアイコン</OPTION>
	            <OPTION VALUE=\"icon3.gif\">柴犬のアイコン</OPTION>
	            <OPTION VALUE=\"icon4.gif\">豆柴のアイコン</OPTION>
	            </SELECT>\n";

と、するのもいいですが、<SELECT>タグを作成する便利な関数がある(というか作りました)のでここではそれを使います。

	//ファイル名の配列
	$array1 = array("", "icon1.gif", "icon2.gif", "icon3.gif", "icon4.gif");
	//アイコンの説明の配列
	$array2 = array("なし", "男の子", "女の子", "柴犬", "豆柴");
	//<SELECT>タグの生成
	$buffer .= Html::select("icon", $array1, $array2, $this->ms[$this->item["icon"]]);

最後の $this->ms[$this->item["icon"]] は修正時にアイコンを SELECTED にするために必要です。
最後にparent.php, child.phpを編集します。$this->ms[$this->item["icon"]] にアイコンファイル名が入っているので以下のようにします。
	//アイコンが選択されていない場合も考慮
	if($this->ms[$this->item["icon"]]) {
		$buffer .= "<IMG SRC=\"../img/" . $this->ms[$this->item["icon"]] . "\">";
	}

と、するのもいいですが、<SELECT>タグと同様便利な関数があるのでここではそれを使います。

	$buffer .= Html::str2str($this->ms[$this->item["icon"]], "<IMG SRC=\"../img/" . $this->ms[$this->item["icon"]] . "\">");

二個以上板を設置する
まずbbs/ディレクトリ下にdata2ディレクトリを作成します。data2data1ディレクトリと同じ構成にします。

次にcustom.phpを編集します。
//変更前
$password = "";
$administ = "";

define("ID1", "bbs1");

$path      = "";

$dir       = array( ID1 => "data1/" );
$logmax    = array( ID1 => 5 );
$file_log  = "log.log";
$file_item = "item.txt";
$dir_skin  = "skin/";
$dir_past  = "log/";
$file_html = "index.html";
$dir_lock  = "lock/";

$to      = array(
		  ID1 => ''
		);
$from    = 'bbs@hoge.com';
$mailmax = 200;

	↓

//変更後(太文字が変更箇所)
$password = "";
$administ = "";

define("ID1", "bbs1");
define("ID2", "bbs2");

$path      = "";

$dir       = array( ID1 => "data1/", ID2 => "data2/" );
$logmax    = array( ID1 => 5, ID2 => 5 );
$file_log  = "log.log";
$file_item = "item.txt";
$dir_skin  = "skin/";
$dir_past  = "log/";
$file_html = "index.html";
$dir_lock  = "lock/";

$to      = array(
		  ID1 => '',
		  ID2 => ''
		);
$from    = 'bbs@hoge.com';
$mailmax = 200;

後は↓のようなURLにアクセスして書き込みを行えれば設置完了です。
	http://〜/bbs/main.php?fileid=bbs2

■ ログの形式

ログファイルはdata1/ディレクトリ下のlog.logです。
1行目にはログのヘッダデータが入っていて、中身は半角区切りで
	親記事NO,子記事NO,過去ログNO,現在ログファイルに存在するスレッド数,二重送信チェックデータ(<>区切り)
となります。
そして2行目以降は1つの親記事とレスの子記事×αを1つのスレッドとして格納されています。
	//------1スレッドの構成------

	スレッドNO
	親記事
	子記事
	子記事
	……
	EOT(End Of Threadの略)



	//------ログファイル全体の構成------

	親記事NO,子記事NO,過去ログNO,スレッド数,二重送信チェックデータ(<>区切り)
	スレッドNO
	親記事
	子記事
	子記事
	……
	EOT
	スレッドNO
	親記事
	子記事
	子記事
	……
	EOT
	スレッドNO
	親記事
	子記事
	子記事
	……
	EOT

■ 過去ログの形式

ログファイルのスレッド数が1ページ表示数×2――つまり2ページ表示数――を越えると1ページ表示数+1以降のスレッドを過去ログとして生成します。
	例 : 1ページ表示数が3の時

	//------現在のログファイル------
	//------スレッド数がページ表示数×2ある------
	ヘッダ
	スレッドa
	スレッドb
	スレッドc
	スレッドd
	スレッドe
	スレッドf

			↓

	//------新規書き込みでスレッドg追加------
	//------スレッド数がページ表示数×2を越える------
	ヘッダ
	スレッドg
	スレッドa
	スレッドb
	スレッドc
	スレッドd
	スレッドe
	スレッドf

			↓

	//------1ページ表示数+1以降を分離------
	ヘッダ
	スレッドg
	スレッドa
	スレッドb
	スレッドc

	//------以下は過去ログとして生成------
	スレッドd
	スレッドe
	スレッドf


過去ログとして生成された記事は修正、削除、レスができなくなります。(つまり閲覧しかできません。)
過去ログはdata1/log/ディレクトリ下に1.html 2.html ……と生成されていきます。

■ これからのこと

■ 著作権

著作権はたかひろにあります。
改造は可。再配布は不可。改造したものの再配布はメールをください。

■ メールください

設置後に感想、要望、バグ等々メールください。

■ バージョン

<02/11/14> Ver1.00
<02/11/10> Ver0.90

ホームへ全体マップへ