Perlと掲示板プログラムの改造

2005/05/09排他制御は mkdir が無難
2004/10/21ファイルのロックに使うsymlink関数のトラブル対策
2002/03/03掲示板プログラム:KENTさんのWeb Forum
2002/03/30Web Forum v3.24の改良
 1.記事を書くボックスを大きくする。
 2.写真と図を記事中の任意の場所に入れられるようにする。
 3.リストツリー表示の日時表示に年を加える[03/28-12:52 → 02/03/28(Thu) 12:52]

 いまいずみのホームページ相談室へジャンプ
リンクはご自由にどうぞ       出典を明記した引用もご自由に
著作権は著作物と共に発生します。いまいずみのホームページの写しを無断で掲載してはいけません。

このホームページを英語、中国語、韓国語へ翻訳する
The HOME PAGE is translated into English, Chinese, and Korean.

排他制御は mkdir が無難(2005/5/9)

Windows用の ActivePerl は symlink 関数に対応していません。
サーバでの運用と自パソコンでの perl の両方を使うのであれば
カウンタ等の排他制御は mkdir、rmdir が適しています。

ファイルのロックに使うsymlink関数のトラブル対策(2004/10/21)

アクセスカウンタ用cgiプログラムをプロバイダのサーバへ置いています。
ホームページアクセスカウンタが9月29日17:31から10月1日10:06まで止まってしまいました。
perlでプログラムし、ファイルの排他制御はsymlink関数で行っています。
7年間はトラブルに気付きませんでした。

今回なんらかの原因でシンボリックリンクの残骸が残ってしまい、結果としてアクセスカウンタが停止してしまいました。
ありえないことが起きたようです。
例えばシステムのメンテとかハードの故障とかの何かが割り込んだのではないかと推測しています。

ありえないことの対策も必要であることを実感しました。
そこで下記を組み込みました。
@通常は数秒以内に処理は終了するはずです。
Aプロセスが10秒待たされた場合はunlinkを強制実行させるようにしました。

掲示板プログラム:KENTさんのWeb Forum(2002/03/03)

レスをツリー構造で表示できる「KENTさんのWeb Forum」を使用しました。
  KENTさんのWeb Forum http://www.kent-web.com/bbs/wforum.html

Q&Aの形態に適しているようです。
レスの付いたスレッドが最上位に移動するのも便利です。

この掲示板を自分のパソコンの中でテストするには
1.初めにWWWサーバとPERLをインストールします。
  KENTさんの説明 http://www.kent-web.com/www/anhttpd/www1.html

2.掲示板プログラムをインストールします。
  KENTさんの説明 http://www.kent-web.com/www/anhttpd/www2.html

Web Forum v3.24の改良(2002/03/30)

以下は Web Forum v3.24 (2002/02/04) の改良経過です。

プログラム内の該当文の場所を探すには、ワードパッドで開いてから
 メニュー「編集」→「検索」
下記の文字を入力する。


1.記事を書くボックスを大きくする。
  標準では、箱が小さ過ぎますのでより大きくします。

  修正するプログラム名称:wforum.cgi

  修正する場所:3ヶ所(アクセスしたブラウザの種類に対応してサイズを切り替えている部分です)

  <標準>
		$nam_wid = 30;
		$sub_wid = 40;
		$com_wid = 64;
		$url_wid = 70;

  <大きくする>
		$nam_wid = 30;
		$sub_wid = 80;
		$com_wid = 100;
		$url_wid = 80;

  注記1)管理者用入力ボックスのサイズは wf_admin.cgi 内で定義しています。
      下記となっていますが、「$subj_wid」は間違いですので「$sub_wid」に書き換えて下さい。
      こうしないと、タイトルの幅が大きくなりません。
      上記 wforum.cgi の場合と同じサイズが良いでしょう。

	if ($agent =~ /MSIE 3/i) {
		$nam_wid  = 30;
		$subj_wid = 40;
		$com_wid  = 64;
		$url_wid  = 46;
	} elsif ($agent =~ /MSIE 4/i || $agent =~ /MSIE 5/i) {
		$nam_wid  = 30;
		$subj_wid = 40;
		$com_wid  = 64;
		$url_wid  = 78;
	} else {
		$nam_wid  = 20;
		$subj_wid = 27;
		$com_wid  = 62;
		$url_wid  = 52;
	}


2.写真と図を記事中の任意の場所に入れられるようにする。

  修正するプログラム名称:wforum.cgi

  機能:記事の中に写真(.jpg)と図(.gif、png)を掲載できるようにしました。理解が深まるでしょう。
     表示したいファイルは、インターネット上のサーバへ置いてください。どこでもかまいません。
     ただし、ファイルの指定は下記の形でなければなりません。
       http://****/****/****.jpg
       http://****/****/****.gif
       http://****/****/****.png
     ファイル指定が書かれた場所に写真、図を挿入します。
     写真等を挿入する場所に制限はありません。文の途中にも挿入できます。

     「ここに写真(.jpg)を載せて https://www.imaiz.com/imaizumi/im-pichan19910518-3.jpg  こちらには図(.gif)を https://www.imaiz.com/im-FAXscanner.gif」
     と書くと下記のように表示されます。

     ここに写真(.jpg)を載せて   こちらには図(.gif)を 



  <修正内容>
   2行追加するのみです。追加場所は下記参照

	#--------------#
	#  自動リンク  #
	#--------------#
	sub auto_link {
		$_[0] =~ s/([^=^\"]|^)(http\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%\+]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;

	# 2002/3/30 IMAIZUMI 下記2行を追加した→写真と図を記事中の任意の場所に表示する
		$_[0] =~ s/([^=^\"]|^)(http\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%\+]+\.[jJ][pP][gG])/$1<img src=\"$2\" align\=middle border\=0 >/g;
		$_[0] =~ s/([^=^\"]|^)(http\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%\+]+\.[gG][iI][fF])/$1<img src=\"$2\" align\=middle border\=0 >/g;
		$_[0] =~ s/([^=^\"]|^)(http\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%\+]+\.[pP][nN][gG])/$1<img src=\"$2\" align\=middle border\=0 >/g;
	}

リストツリー表示の日時表示に年を加える[03/28-12:52 → 02/03/28(Thu) 12:52](2002/04/16)

リストツリー表示で年を知りたい時があります。そこで修正してみました。

  修正するプログラム名称:wforum.cgi

  <修正内容>
	#--------------------#
	#  リストツリー表示  #
	#--------------------#
	sub ListTreeOpen {
	途中省略
		$i=0;
		while () {
			local($no,$reno,$lx,$sub,$email,$url,$name,
				$dat,$msg,$timek,$h,$pw,$w,$oya,$smail,$res) = split(/<>/);
	# ここへ下記1行を追加
			$dat = &get_time1($timek);
	途中省略
	#--------------#
	#  時間の取得  #
	#--------------#

	sub get_time {
	途中省略
	}

	# get_time を修正して、下記 get_time1 を作成する
	sub get_time1 {
		local($time, $log) = @_;

		if (!$time) { $time = time };
		($sec,$min,$hour,$day,$mon,$year,$wday) = localtime($time);

		@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
		$year1 = substr($year+1900,-2);
		$date = sprintf("%02d/%02d/%02d(%s) %02d:%02d",
				$year1,$mon+1,$day,$week[$wday],$hour,$min);
		return $date;
	}

いまいずみのホームページ相談室   いまいずみのホームページへ