2.素人からみたWinXP Pro サーバ構築のポイント

 2.3 FTPサーバ
マイクロソフトのIEには既にFTP機能が搭載されサーバ機能を有しています。種々試してみたがWebサーバ同様自由度が狭く小生の要求を満たせないため、NATルータとDHCPに対応でき、PASVモードができるWarFTPを採用することとした。ショップメンバ間の書類のやり取りに限定し、呼び込んだ状態でダブルクリックオープンして作業できること、ユーザ名とパスワードで保護できる事等を目標とした。
メンバは名無しでIPはDHCPであるので、FWともどもどうアクセス許可をすればよいか?ただ今思案しています。好い方法があればご一報下さい。一般には一切開放していないのですが、一箇所だけコミュニティ広場を開放することとしました。一般ユーザへの掲示、広報の場としてFTPアクセスに活用したらと考えています。
サーバの設定についてはMOO Worldさんが参考になります。ファイルアクセス設定/一般の項目にrecursive[再帰的]とフリーの項目がありますが、アップロードとダウンロードの件数、容量等に比率を設けアップロードに見合う分をダウンロードできるよう制限する方法をrecursiveといい、無制限をフリーと言います。又、ファイルアクセス設定項目のexecute[実行]は将来設定用で現在は何も生きていません。 IPアクセスリストの許可はドメイン名ではダメでIPアドレスしか受付けないので要注意です。
インストールと日本語化パッチ、PASV対応、DHCP対応等システム構築上のキーポイントを纏めたので以降を参照下さい。

(1)War Daemonのインストールと日本語化パッチ
 日本語化する場合は次の手順で行う。
インストールの最後にConnection Propertiesの画面がでたらキャンセル→任意フォルダに解凍したwarftpd1_82_00ja.lzhの中にあるwarftpd1.82.00j1.EXEをDaemonのメイン(WDM.exeのある)フォルダにコピーし実行→War Daemon Managerを起動しWar FTPの設定をする。

(2)NATルータのPASV対応
 このFTPはファイアウオールやNATルータ、動的IP対応ができPASVモードが可能につき、nat.confを次のように変更する。但し、FW[ZoneAlarm]は許可しない限りインタネットアクセスをブロックする。
1行=127.0.0.1 0 0 0, 2行=ルータゲートIP(192.168.1.0/255.255.255.0) 0 0 0, 3行=0/0 0  ルータWAN側IP(グローバルIP=220.54.***.***) 外部との通信ポートレンジ(4000-4029)

(3)動的IPでグローバルIPが変更した場合の対応
 下記により日本語パッチ.lzh内のCGIとcrontabを書き換え、CRONS.exeにより10分間隔でCGIを起動するシステムを構築する。
ip_checka.cgiの変更
 $host= "http://192.168.*.*/romdisk/status.cgi"、$log_dir= "G:/***/war-ftpd/"、$dir="G:/***/war-ftpd/"
crontabの変更
  0,10,20,30,40,50 * * * * perl G:\ip_checka.cgiのフルパス
CRONのシステム構築
 zipファイルを任意フォルダに解凍、ntsetup.exeを実行、訂正したcrontab,crons.exe,cron.logをsystem32フォルダに移動し、「コンピュータの管理」画面でサービスを設定開始する。
これに変わる汎用性のあるやり方として、「コントロールパネルのタスク」ウィンドウで「スケジュールされたタスクの追加」WIZを起動してip_check.cgiを周期的に起動するタスクを作成する方法があるが、Win2000では機能するとのことだが、色々試したがXPではまるで動作しなかった。

メーラのインストールと設定についてはreadsendm.txtの通りに作業すれば好い。その際、サーバのアカウントとメールアドレスをダミーで登録して置いてそれを設定に使う。このアカウントを使ってメーラは相手先にメールを送信する。尚、.iniファイルはnotepadで編集OKである。 この.exeファイルはWebサイトから外れWebサーバのルートから目の届く範囲に置かないとうまく動作しないことがある。
HTMLのフォームとメーラの仲介をするのがCGIでpostmail.cgi改の下記の部分を自分のシステムに合わせて修正し、html内のformにactionとpostメソッドを指定すればシステムが構成される。特に.cgiファイルをperlと関連付けすることと、jcode.plを.cgiフォルダに入れて置くこと、及びhttpd.conf内でcgiルートのアクセス許可をしておくことが重要である。formにはcgiをフルパスで指定する(例:"http://www.xxx.zzz/cgi/***.cgi")。
#!/usr/local/bin/perl---自分のシステムに合わせる
$mailprog = 'G:/***/sendmane.exe';---自分のシステムに合わせる
$mailto = '****@***.***';---メール先アドレス
$subject = "フォームメール";---自分のシステムに合わせる
$script = '/cgi/***.cgi';---cgiのWebサーバパスが通っていること。
$back = 'http://www.xxx.zzz/yyy/index.html';---戻り先:Web外からWeb内に戻る。

2006.7.20日現在、Apache Ver2.0に最新のPHP Ver5.1.4をモジュールとして組み込み、これの拡張バージョンmysqliによって最新のMySQL Ver5.0.22を動かしています。これらのシステム構成上の設定及び問題点について以下にまとめました。

(1)ApacheにPHPをモジュールとして組み込むには下記の設定をします。
@.confファイルに下記項目を書き込む。
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php
PHPIniDir "C:/php"・・・php.iniファイルの場所を指定
拡張子のないPHPファイルをコンテントネゴシエーションを使い判別させるためにはAddTypeを次のように変更する。
AddHandler php5-script php
AddType text/html php
Aシステムプロパティの詳細設定の環境変数に以下の設定をする。
システム環境変数のPATH変数に PHP のフォルダC:/phpを追記する。
PHPIniDirの代わりに新規に変数「PHPRC」を作成、値C:/phpを設定してもよい。PHPが機能不良の事故を起しましたが、PHPRCのドライブ文字が変わってしまった事が原因でした。再設定し再起動した結果正常になりました。

Apacheは現在Ver2.2が最新になっている。共通構成を.confファイルとし、今までSectionで設定していた個別設定をDefaultとExtrasのフォルダに同じものを各項目ごとに個々に分割し格納している。ユーザの利用に応じてExtras内の該当.confファイルを修正する方式に変わった。動作は非常に軽快になったが、LoadModuleの設定を書き込むと、途端に動かなくなり、PHPが使えなくなる。従って、PHPを利用する場合、対処版がでるまでVer2.0を使う以外手がない。

(2)メールやMySQL、CharacterSet等に関するPHPのphp.iniに設定すべき項目は以下の通り。
short_open_tag = On asp_tags = On expose_php = off サーバには表示させない
variables_order = "GPCS" enable_dl = On allow_url_fopen = On extension=php_mysqli.dll
[COM]com.allow_dcom = true
[mail function]SMTP=example.com smtp_port = 25 sendmail_path ="C:\mail\XMail\sendmail -t -i"
[MySQLI]mysqli.default_port = 3306 mysqli.default_host = 'localhost'
session.save_handler = files session.use_cookies = 1 session.name = PHPXXXYYID
mbstring.language = Japanese
extension=php_mysqli.dllはリストにないため追記します。

(3)MySQLについて
このアプリの最大の欠点は内部キャラクタセットlatin1_swedish_ciをそのまま吐き出すことです。更に、レジスタを書き換えてしまい、キーボードから文字入力をダウンさせることです。何度もこのトラブリに見舞われ往生しました。文字入力に関するレジスタは下記のとうりですが、これを復旧する方法には@レジスタを修正するAデバイスマネージャ/キーボード/日本語PS/2キーボード(106/109キーCtrl+英数)プロパティのドライバ更新を実行する(windowsUpdate接続せず→特定場所からインストール→検索せずドライバ選択→互換ハード表示をノーチェック→標準キーボードから選択し実行)B再起動しF8をONして、起動オプションの前回正常起動を選択実行する。・・・等があります。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\の
00000411フォルダがkeyboard,E0010411フォルダがIME,e0200411フォルダがIMEのレジスタで値がKBDJPN.DLLになっているのが正常。
インストールするときキャラクタセットを3種類(標準、UTF8、選択)選択できますが、SJIS,CP932等は文字化けして使えません。標準又はUTF8が良好です。このアプリはコマンドプロントから使用するようになっていますが、標準の場合、コマンドプロントで一部和文が文字化けします。しかし、上記トラブリのリスクは最大です。
UTF8はページとのやり取りは軽快でHTMLの文字化け、データ入出力上のトラブリは見受けられませんが、コマンドプロントでは和文は全て文字化けします。PHPでやりとりして使う場合は最もベターで、問題ないようです。
レジスタ改ざんを防止するため、ページには必ずmeta文にShit_Jisを明記するよう注意下さい。

(4)PHPとOLE互換API(Word、Excel、IE、etc)の連携について
PHPはOLEオートメーションアプリケーション(ActiveX)とCOM関数を通じて、相手のコードを実行することが出来ます。Webページでは顧客情報をフォームから取得しデータベース(DB)に登録、顧客からのサービス依頼に照合確認して応対をするシステムをとっています。このDBの作成照合管理をするソフトがmySQLやMsSQL等ですが、プログラム、データのメモリ容量が大きく、商売人向けであり個人利用には不向きです。又、管理には専門技術者を必要とし個々のデータの大きさも制限されます。
DBをエクセルワークシートで作成すれば誰でも簡単に管理ができます。小人数対客先用や個人利用、自宅サーバー用にはこの方式で十分と思います。
本サイトでは、PHPサーバー・MySQL・Xmail組み合わせ方式とPHP・エクセルDB・Xmail組み合わせ方式を実装し、登録メール、サービス確認と認可、サービス記録等の同じ機能を実現しています。
構成ファイル数は、MySQL+7と5で、容量は85MB+29kBと82kBです。如何にMySQLが資源を無駄使いしているか解ります。
MySQL方式サイトはここ、Excel方式サイトはこちらを訪問して試して下さい。尚、レジスタ改変が頻発する場合はMySQLサイトは中止することもありますので悪しからず。PHPによるMySQLの操作ツールを用意しましたのでダウンロードコーナをご覧下さい。これらの顧客情報管理アプリケーションを欲しい方は申し出下さい。