トップ 新規 一覧 Farm 検索 ヘルプ RSS ログイン

SOSIIを分割しようの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!{{category SOS2改造}}SOSIIを分割しよう

!!概要
SOSIIを分割し、負荷軽減をはじめとする物理的なメリット、潜在的な優越感等を保ちます:)

CGI実行スクリプトを分割することで処理を分散し、サブルーチンを外部ファイルとすることで実行時の負担も軽減されます。
CGIスクリプトは実行前に全てのソースを読み込んでから処理するという性質がありますので、結構効果的でしょう。

またサンプルとしてあらかじめ分割を施したSOSIIも配布しています。

!!サブルーチンを分割する
!1. 外部ファイルを作成する
まずは # Sub Find Item # の内容をテキストドキュメント(txtファイル)にコピペします
また行末に「1;」を記述します
これは外部参照(require)完了しました、という意味合いの記述です

 # Sub Find Item #
 sub find_item {
 	略
 }
 1;

以上のような内容になります。
これを保存します。

また、ファイル名は分りやすいようにサブルーチン名が良いと思います
仮に find_item.pl というファイル名で保存しましょう
拡張は「pl」としましたが、これはアスキーデータ(要はテキスト)ならば何でも構いません
強いて言えば拡張子自体が無くても問題ありません

ただし、ファイルをURLで直に指定するとスクリプト内容が丸見えになる場合があります
これらを避けるために拡張子は「pl」または「cgi」が好ましいでしょう
これら二つは大方のサーバーにおいて実行スクリプトと設定されています
ファイルを覗こうとしても実行エラーとなり、スクリプト内容を見ることはできないからです

ユーザーレベルで.htaccessを設定できる場合はその限りではありませんが、ここでは割愛します

!2. require の記述
# Main Program #
 if ($Fm{'mode'} eq 'find_item')	{ &play_form	}
上記部分を
 if ($Fm{'mode'} eq 'find_item')	{ require 'find_item.pl'; &play_form	}
このように変えます

これで探索をしようとした時のみ、探索用のサブルーチンを読み込む形になります。

 require './xx/xx.pl';
という感じで相対パス、または絶対パスで指定します

また例の如く
 require "$destination$script";
のように変数で扱うこともできます


以上でサブルーチンの分割作業は終了です
本体CGIの # Sub Find Item # を削除し、問題なく探索が実行できれば成功です


!!実行スクリプトを分割する
!1. 外部ファイルを作成する

まずは本体CGIとの共有するサブルーチン、設定項目を外部ファイルとして読み出すように変更します
無理に共有する必要はありませんが、リソースの活用、およびサブルーチン書き換え時の煩雑を回避するために行いましょう
同じ名前、同じ用途のサブルーチンが複数ある場合、これをすべて同じように変更する必要がありますが、共有すれば変更の手間が一度だけになります
ミスも減るでしょう

作成するのは二つ
 init.cgi
 sub_routine.pl
になります

前者はイニシャル(設定)ファイルとして
 24行目
 # ---------- FILE PATH
から
 213行目
 $method = 'POST';	   # アクションメソッド (POST Only)
までをコピペしまします

また
 # ---------- FILE PATH
の中に
 $lsturl = './list.cgi';	  # list.cgiのパス 755(705)
を追加します
無くてもいいのですが、なんとなく体裁を合わせてみます


後者は本体、およびリスト表示で扱うサブルーチンを格納します
リスト表示のみで使用するサブルーチンもありますが、ここでは共有するということにしておきます

リスト表示で必要になるサブルーチンは以下の通りです
# Sub Header #
# Sub Style #
# Sub Footer #
# Sub List In Order #
# Sub Stellatio Sub #
# Sub Rate #
# Sub Split Item #
# Sub Find to Delete #
# Sub Find the Best Player #
# Sub Decoration #
# Sub Get User File #
# Sub List In #
# Sub Lock
# Sub Unlock #
# Sub Decode #

以下はリストのみで使用
# Sub Page #
# Sub Sales In Order #
# Sub Player List #
# Sub Simple View #

ファイルの最後に「1;」を忘れないようにしましょう
忘れても動くかもしれませんが……

!2. list.cgiを作成する
リスト表示用の実行スクリプトです
内容は以下のようにします――

 #!/usr/local/bin/perl
 
 require './init.cgi';		# init.cgiのパス 644
 require './jcode.pl';		# jcode.plのパス 644
 require './sub_routine.pl';	# sub_routine.plのパス 644
 
 # Main Program #
 &decode;
 if ($Fm{'mode'} eq 'list')	{ &list_order	}
 if ($Fm{'mode'} eq 'list')	{ &player_list	}
 if ($Fm{'mode'} eq 'sale')	{ &sale_order	}
 &footer;
 exit;

以上13行です、シンプルですね

!3. メニューのハイパーリンクを変更します
# Sub Menu #
内に
 	print qq|<br>PLayer List :( |;
 	print qq|<a href=$cgiurl?mode=list&order=ID target=_blank>ID</a>||;
 	print qq|<a href=$cgiurl?mode=list&order=Name target=_blank>Name</a>||;
 	print qq|<a href=$cgiurl?mode=list&order=Job target=_blank>Job</a>||;
 	print qq|<a href=$cgiurl?mode=list&order=Money target=_blank>Money</a>||;
 	print qq|<a href=$cgiurl?mode=list&order=Bounty target=_blank>Bounty</a>||;
 	print qq|<a href=$cgiurl?mode=list&order=Rate target=_blank>Rate</a>||;
 	print qq|<a href=$cgiurl?mode=sale target=_blank>Sale</a> )|;
という部分があると思います
この「$cgiurl」を「$lsturl」に変更します

以上で実行スクリプトの分割作業は終了です
外部ファイルに移植した部分を削除し、問題なく実行できれば成功です

上記のような要領でガシガシ分割します
その他の分割などはサンプルを参考するなどしてください


!!SOSII分割版サンプル(Script Of Saga II Worlds Apart)

'''再配布という形になりますので利用規約を厳守していただく必要があります。'''

!利用規約
まずは配布元であるMISSING LINKの利用規定に同意する必要があります。
http://www.area-s.com/main/rule.html

実際に配布を行っている当サイトの利用規約に同意する必要があります。
SOS2改造利用規約

!サポートに関して
'''分割版サンプルは本家MISSING LINK及び、他のSOSII関係サイトにおいては一切のサポートを行いません。'''

サポートは当サイト内でのみ行えます。
SOS2設置・改造サポート規約をよくお読みください。
ご意見やバグ報告など、フィードバックは大歓迎です。

!免責
SOS2改造利用規約に準じます。

!サンプル概要
*本体CGIが4つの実行スクリプトに分割されています
*各ルーチンがパールスクリプト形式(.pl=要はテキストドキュメント)で分割されています
**サブルーチンの分割に関しては必要以上に分割されています
*管理メニューでキャラクター選択がプルダウンで実行可能
*マイレコード(旅の記録)が分割されて保存されます
*キャラクターデータなどのファイル形式がdatからcgiに変更されています
**この変更はセキュリティ上の観念から必須と思われます

というわけですので改造ベースなどにも最適です、多分

!ファイルのダウンロード
以下のどちらかのファイルをダウンロードします。

*{{ref sos2_worldsapart_v1.10.lzh}}
*{{ref sos2_worldsapart_v1.10.zip}}

!設置に関して
デフォルトのSOSIIと相違ありません。

:パーミッションと説明:
,ファイル名,パーミッション,説明
,usedata,777 or 707,プレイヤーデータを格納する空フォルダ
,record,777 or 707,マイレコードを格納する空フォルダ
,dat,777 or 707,各種データ用のファイルをまとめて格納しています、ゴチャゴチャするので
,└ 〜.cgi,777 or 707,各種データ。パーミッションは忘れずに変えましょう
,img,644 or 604,画像用の空フォルダ
,pl,644 or 604,サブルーチンがまとめて格納してあります、やっぱりゴチャゴチャするので
,└ 〜.pl,644 or 604,サブルーチン。基本的にパーミッションを変更する必要はありません
,init.cgi,644 or 604,本体用の各種設定ファイル
,index.cgi,755 or 705,インデックスページとして使用。トップページ表示、ログイン、新キャラの作成を行います
,list.cgi,755 or 705,リスト表示のみを行います。
,rcd.cgi,755 or 705,マイレコード表示のみを行います。
,sos2.cgi,755 or 705,本体CGI。ログイン、新キャラ作成、レコード表示、リスト表示以外の実行を行います。
,ufs2.cgi,755 or 705,管理用スクリプト。ほぼデフォルトと同じです。

パーミッション設定においてはサーバーの設定によってこの限りではありません

!!バージョンアップ差分
本家配布版の本体にバージョンを合わせてしまったので、体裁上リビジョンになっていますが:p

!Rev.1.0→Rev.2.0(04/12/2008)
*管理メニューからファイルチェックが実行できます
**SOSII Check Script を ufs2.cgi に内臓しました

1. {{ref check.pl}} ファイルを追加します。

2. Main Program
&unlock;
exit;

の'''直前'''に、以下1行を追加します。

if ($Fm{'mode'} eq 'check_script') { require './check.pl'; &check_script }

3. # Sub Admin #

print qq|<input type=radio name=mode value=recover>プレイヤーの復帰<br>\n|;

の'''直下'''に以下2行を追加します。

print qq|<hr>\n|;
print qq|<input type=radio name=mode value=check_script>ファイルチェックモード<br>\n|;

差分の適用は以上です。

!!!このページのコメント