La!coodaWIZ あれこれ

作成日:2007.7.8

 La!coodaWIZのフォーラムにおける筆者の主な投稿内容を以下にまとめる。

動作環境確認用スクリプト
Windowsで WIZが動作するWebサーバは?
user:admin, password:wiz=0yen でログインできないときには
基本認証ではなくオンラインデモのような方法で認証するには
IISでログインできないときには
ログインダイアログを表示せずにログインするには
メール送信できないときには
session.save_path の設定について
MySQL 5.0を使うには
Windowsで PostgreSQLを使うには
PHP5で動作させるには
  1. 動作環境確認用スクリプト
    各種設定、ログイン、メール送信等、La!coodaWIZの動作確認をするためのスクリプトを作成した。
    以下のファイルを test-env.php というファイル名で /wiz/ 下に置き
    (右クリックして保存し、ファイル名を変更する))、
    http://127.0.0.1/test-env.php にアクセスして使う。
    test-env.php
    
  2. Windowsで WIZが動作するWebサーバは?
    筆者が確認した範囲では、Apache, IIS, AN HTTPD, 04WebServerで動作する。
    Black Jumbo Dog はプログラム内からの基本認証に対応していないので動作しない。
    
    IISでは php4isapi.dll を使うように設定し、accept.confを以下と置き替えることが必要である。
    accept.conf for IIS
    さらに、gw.phpで $hostname を以下のように設定する。
    $hostname = $_SERVER["HTTP_HOST"];
    
  3. user:admin, password:wiz=0yen でログインできないときには
     上記 1. の動作環境確認用スクリプトの「ログイン」で
    ユーザ名: TesT, パスワード: tESt と入力する。
    
    「Webサーバ単体で認証処理が正常に動作することを確認しました。
    処理を続けるには、ブラウザを一旦閉じてください。」
    
    とアラートが表示されれば Webサーバで基本認証は問題なく動作している。
    それにもかかわらずユーザ名: admin, パスワード: wiz=0yen でログインできないなら
    それは WIZ 側のインストールや設定を疑ってみる。
    
    一方、上記のメッセージが表示されないときは、WIZは全く無関係であり、
    Webサーバ自体がそもそも基本認証が不可な状態である。
    
  4. 基本認証ではなくオンラインデモのような方法で認証するには
    accept.confを以下と置き換える(右クリックして保存し、ファイル名を変更する)。
    accept.conf
    
    さらに、schedule2.phpの 273-275行目
    require_once ($_ROOT_DIR_."class/scheduleinfo.php"); 
    require_once ($_ROOT_DIR_."class/scheduleinfoowner.php"); 
    require_once ($_ROOT_DIR_."class/dateinfo.php"); 
    の3行を、109行目
    include("./include/accept.conf");
    の前に移動する。
    
    ログアウトも必要なら、以下の logout,phpを使う。
    logout.php
    
  5. IISでログインできないときには
    IIS/5.1 ではコントロールパネルから以下のように設定する。
    
    インターネットインフォメーションサービス -> 規定のWebサイトのプロパティ ->
    ディレクトリセキュリティ -> 匿名アクセスおよび認証コントロール -> 編集 ->
    匿名アクセスにチェック
    ユーザー名:適当に選択
    IISによるパスワードの管理を許可するにチェック
    その他は一切チェックなし
    
  6. ログインダイアログを表示せずにログインするには
    以下を参考にレジストリを変更すれば IEで
    http://username:password@www.example.com/
    にアクセスすれば、パスワードの入力は不要である。
    (これは、特に La!coodaWIZに限った話ではない)
    
    http://support.microsoft.com/kb/834489/ja#
    の「HTTP URL または HTTPS URL のユーザー情報を処理する新しいデフォルトの動作を無効にする方法」 
    
    エクスプローラおよび Internet Explorer で新しいデフォルトの動作を無効にするには、
    以下のレジストリ キーのいずれかで、iexplore.exe および explorer.exe の DWORD 値を作成し、
    それらのデータを 0 (ゼロ) に設定します。 
    • すべてのユーザーに適用する場合は、次のレジストリ キーに値を作成します。 
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE 
    • 現在のユーザーにのみ適用する場合は、次のレジストリ キーに値を作成します。 
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE 
    
  7. メール送信できないときには
    WIZでは phpの mb_send_mail関数でメール送信しており、基本的に php.iniを正しく設定すれば送信できる。
    Outlookや BASP21等メールクライアントでメール送信できているなら、WIZでも可能である。
    プロバイダのSMTPサーバで SMTP AUTHが必要かどうかで2つのケースに分かれる。
    
    【Case 1】SMTP AUTH不要
    この場合は、php.iniの [mail function] で、(OCNであれば)以下のように設定する。
    SMTP = smtp.xxxx.ocn.ne.jp
    smtp_port = 25
    sendmail_from = xxxxxxx@yyyyy.ocn.ne.jp
    ;sendmail_path =
    
    一方、SMTP AUTHが必要なときは、sendmail wrapperを使う方法と、自前のメールサーバを使う方法の2つがある。
    
    【Case 2.1】sendmail wrapper -> プロバイダの SMTPサーバに送信
    sendmail wrapperとしては以下のページで紹介している sendmane.exe などを使う。
    http://homepage1.nifty.com/yito/anhttpd/faq/sendmane.html
    (注)sendmaneは商用利用禁止なので、上記ページの「同類のプログラム」を使うことになる。
    
    この場合は、php.ini を以下のように設定する。
    ;SMTP = localhost
    ;smtp_port = 25
    ;sendmail_from = me@example.com
    sendmail_path = "c:\sendm\sendmane.exe -t -i"
    
    【Case 2.2】自前のメールサーバ -> プロバイダの SMTPサーバに中継
    自前のメールサーバは XMail, PMail Server, Kirium, Radishなどを使って立てる。
    
    この場合は php.ini を以下のように設定する。
    SMTP = localhost
    smtp_port = 25
    sendmail_from = username@domainname
    ;sendmail_path =
    
    Webサーバが IISのときは、【Case 2.1】では以下のエラーが出てメール送信不可。
    Warning: mb_send_mail() [function.mb-send-mail]: Could not execute mail delivery program 'c:\sendm\sendmane.exe -t -i' in ..
    
    メールサーバが POP before SMTPのときは、【Case 2.1】において、
    sendmane.exeを POP before SMTP対応に設定をする。
    
     上記 1. の動作環境確認用スクリプトでメール送信ができれば WIZでも送信できる。
    
  8. session.save_path の設定について
    Windowsでは
    session.save_path = "/temp"
    ではなく
    session.save_path = "c:\temp"
    のようにドライブ名付きで設定する。ドライブ名を省略すると、
    実行中のスクリプトが存在するドライブ直下の tempフォルダと解釈され、
    存在しないと warningになる。
    
    また、session.save_pathをコメント行にすると、C:\windows\temp が使われので、
    コメントにするのも手である。
    
    そのフォルダ内には "sess_" で始まるファイルが作成されるので、手動で削除が必要である。
    
  9. MySQL 5.0を使うには
    MySQL 4.0は2006年9月末でサポート終了となり、公式サイトでの配布は終了している。
    MySQL 4.1のサポートも2006年12月末で既に終了している。こちらは現在も配布は続いているが、
    それも時間の問題かもしれない。
    
    今後のために WIZで MySQL5.0を使うにはどうすればいいかをまとめまた。
    内容的に特に新しいことはない。
    Windows上で一応確認はしたが、十分な検証はできていない。
    人柱に期待する。
    また、以下の説明は MySQL 4.1でもそのまま適用可能である。
    
    (1)MySQLのインストール
    例えば以下の解説などが参考になる。
    ・http://www.nihon-eng.co.jp/c-break/TechNote/mysql/MySQL5_Inst.htm
    ・http://www.y2sunlight.com/ground/?MySQL4.1%2F3.MySQL%A5%B5%A1%BC%A5%D0%20Windows%C8%C7%A4%CE%C0%DF%C4%EA
    
    (2)my.iniの編集
    パスワードや文字コードに関連して、以下を変更する。
    [mysql]セクション内
    default-character-set=ujis に変更
    
    [mysqld]セクション内
    以下の 2行を追加
    old-password
    skip-character-set-client-handshake
    
    default-character-set=ujis に変更
    
    sql-mode行を
    sql-mode="MYSQL40" に変更
    (MySQL 4.1の my.iniには sql-mode 行はないのでこの行を追加)
    
    my.iniのその他の行はとりあえず変更しない。
    
    (3)MySQLの再起動
    MySQLのサービスを再起動する。
    
    (4)createDbForMySQL.sqlファイルの編集
    以下の変更によって、インストール時のエラーがなくなる。
    185行目
    ac_date DATETIME NULL DEFAULT 'now', を
    ac_date DATETIME NOT NULL, に
    620行目
    id int unsigned DEFAULT 0 NOT NULL AUTO_INCREMENT, を
    id int unsigned NOT NULL AUTO_INCREMENT, に
    
    (5)mysql -u root -p****** < createDbForMySQL.sqlを実行
    
    (6)wiz\bbs\db\mysql.phpの変更
    以下の各行で、DEFAULT 0 あるいは DEFALT '0' を削除する。
    この変更をしないと掲示板の設定でフォーラムが作成できない。
    
    219行目
    id int unsigned NOT NULL, に
    251行目の中
    id int unsigned DEFAULT '0' NOT NULL AUTO_INCREMENT,
    の箇所を
    id int unsigned NOT NULL AUTO_INCREMENT, に
    280, 339, 392行目
    id int unsigned NOT NULL AUTO_INCREMENT, に
    
    (7)その他
    環境によっては、phpMyAdminに rootでログインするためには
    set password for root@localhost=old_password('******');
    を実行することが必要かもしれない。
    
  10. Windowsで PostgreSQLを使うには
    PostgreSQL 8.2.3 の場合のインストール手順。
    
    1. PostgreSQLのインストール
    パスワードの設定以外は、デフォルトのまま進めても構わない。
    以下では、User: postgres, Password: xxxx と仮定して説明する。
    
    2. データベース masters の作成
    createdb -U postgres -E EUC_JP masters
    Password: xxxx
    CREATE DATABASE
    
    3. ユーザ nobody の作成
    createuser -U postgres -P nobody
    Enter password for new role: yyyy
    Enter it again: yyyy (nobodyのパスワードを yyyy とする)
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databasees? (y/n) n
    Shall the new role be allowed to create more new roles? (y/n) n
    Password: xxxx
    CREATE ROLE
    
    4. 設定ファイル createDbForPgSQL.sql の変更(v1.4.0の場合)
    配布ファイルでは実行順序に問題があり、schedule_date のところで ERRORが発生する。
    231〜260行目("CREATE TABLE reservation" 関連)を切り取り、
    "CREATE TABLE transactions (" (切り取る前の行数で 298行目)の前に挿入する。
    
    5. テーブルの作成/初期化
    psql -U postgres masters < createDbForPgSQL.sql
    Password for user postgres: xxxx
    出力リストに ERROR がないかどうかを確認すること
    
    6. gw.php の変更
    $db_password = "yyyy"; 上記 3.で設定したnobodyのパスワード
    $db_port = "5432";
    $db_type = "PostgreSQL";
    
    7. アクセス
    http://127.0.0.1/wiz/
    
  11. PHP5で動作させるには
    【問題1】スケジュール帳で「前の月」「次の月」が正しく表示されない。
    
    [解決法]:schedule2.phpの 2485行目を以下のように修正する。
     // カレンダー上の初日取得
     $tempDateInfo = $dateInfo;
      ↓
     // カレンダー上の初日取得
     $tempDateInfo = new DateInfo();
    
    [参考] PHP5での異常な動き、スケジュール帳の月表示
    
    【問題2】掲示板の設定、表示ページにアクセスできない。
    
    [原因]:wiz\bbs\lang\japanese.php の中の関数名 date_format が問題の模様。
    PHP の同名の関数とかぶっているから?
    
    [解決法]:関数名を date_format_wiz とでも適当に変更する。
    date_format を呼んでいる以下の箇所も合わせて変更が必要。
     wiz\bbs\index.php の 186行目
     wiz\bbs\read.php の 526行目
     wiz\bbs\search.php の 487行目
     wiz\bbs\admin\pages\easyadmin.php の 65行目
     wiz\bbs\include\multi-threads.php の 55行目
     wiz\bbs\include\threads.php の 120行目と 124行目
     wiz\bbs\scripts\news.php の 50行目
    (注) 掲示板の設定には入れるがフォーラムが作成できない現象とは異なる。
    その場合は ユーザ(nobody)の作成権限の問題と思われる。
    
    【問題3】ファイル共有でファイルのアップロードが失敗する(これは PHP4でも起きる)。
    
    [原因]:php.iniで、以下の組み合わせの場合に起きる。
     output_handler = mb_output_handler
     mbstring.http_output = SJIS
    
    [解決法]:php.iniを以下のように変更する(コメント化でもよいが)。
     output_handler = mb_output_handler
      ↓
     output_handler = 
    もし output_handlerを変更できない理由があるなら、
     mbstring.http_output = SJIS
      ↓
     mbstring.http_output = pass
    でもよい。どちらかというと後者の方をお勧めする。
    
    (注) 上記の内容とは関係ないが、ファイル共有したファイル名の一部消失について
    の現象は Windows上では起きないようである。
    
    以下 2006.06.07追記
    【問題4】メール送信時に undefined function i18n_convert() エラーが発生する。
    
    [原因] PHP5には i18n_convert 関数がないから。
    
    [解決法] 以下の10箇所の mb_send_mailを呼んでいる箇所を修正する。
    wiz\wiz\flowpetit.php 669行目、787行目、888行目
    wiz\wiz\schedule2.php 1252行目
    wiz\wiz\telmemo.php 227行目、265行目
    wiz\wiz\workflow.php 1062行目、2316行目
    wiz\wiz\class\keitaiRoutineForPc.php 36行目
    wiz\wiz\class\NoticeDrawUp.php 251行目
    
    例えば最初の wiz\wiz\flowpetit.php の 669行目の場合であれば、
    mb_send_mail($email, ("=?iso-2022-jp?B?" . base64_encode(i18n_convert("[WIZ] ワークフロー 承認済","JIS","EUC")) . "?="), $mailstr, "From:$fromMailStr");
     ↓
    mb_send_mail($email, "[WIZ] ワークフロー 承認済", $mailstr, "From:$fromMailStr");
    のように、mb_send_mail内の
    「("=?iso-2022-jp?B?" . base64_encode(i18n_convert(」
    と
    「,"JIS","EUC")) . "?=")」
    を削除する。他の 9箇所も同様。
    
    Subjectの文字コード変換、base64エンコード、iso-2022-jpの付与は外で自分で実行しなくても
    mb_send_mail関数の中で実行される。
    
  12. リンク
     La!coodaWIZフォーラム


作成:いと,mailto:gfh05223@nifty.com