ちょっとした情報メモ用にPukiwikiをまた立ち上げようとしたら、PHPとかってもうバージョン4は終わっちゃってるのね。というわけで、最新版を懲りずに試してみることにした。
インストール
- PHP 5.2.6インストーラ版を入手してインストール。WebサーバーはWindowsXPのIISなので、ISAPIモードでインストールする(以前はZip版からDLLを抜いたりしないと行けなかったのが、一通りのものを配置してくれるようです)。
- IISの管理画面で、ツリー表示のWebサイト→右クリックプロパティ→[ISAPIフィルタ]タブ→[追加] から、「C:\Program Files\PHP\php5isapi.dll」をフィルタ名「php」で追加。
- 同じく[ホームディレクトリ]タブ→アプリケーションの設定、「構成」ボタン→拡張子phpに上記のphp5isapi.dllが指定されていることを確認。
- phpinfoを書いたファイルを配置して、開く。
- 「-2147417842 (0x8001010e)」と表示...なんでーーー!!
- リロードしてると、たまに「The specified module could not be found.」も出る(Google Chrome)。IE7だと「HTTP 500」)。
参考までに復元したサイトで書き込み失敗する件
参考までに以前のPukiwikiとPHP4で動かしていたファイル群を復元して開いてみたところ、書き込みや変更を行うとエラーが。この件については、コメントにもあるとおりIISが使っているゲストアカウントに、Windows Explorer上からWebサイト用フォルダのアクセス権「書き込み」を付与することでクリアできた。kumaさんサンクス(忘れてたよ)。
モジュールが無いという警告
最後の件については、http://jp2.php.net/install.windows に補足説明があった。パスに空白が入っている場合にでるとか。
If the path to your PHP directory has spaces (e.g. "C:\\Program Files\\PHP") and IIS gives a 500+ error or responds with "The specified module could not be found." when you try to run a PHP script, try changing the ISAPI DLL's path in IIS (in the "Home Directory" tab, under "Configuration...") to the 8.3-equivalent path. That is, use C:\\PROGRA~1\\PHP\\php5isapi.dll instead of "C:\\Program Files\\PHP\\php5isapi.dll".
実際にPHPのスクリプトを動かすフォルダの「ホームディレクトリ」、構成の所にある、php5isapi.dll への参照を、「C:\PROGRA~1\PHP\PHP5IS~1.DLL」に変更すると問題無く動いた。
さらに、IISのWebサイト設定のルートは「C:\Web」、実際にPukiwikiのファイルを置くのは「D:\Web\Info」にしようと思っていたのだが、php.iniの「doc_root」設定が「C:\Web」になっていたので、Dドライブに置いたPHPファイルは一切動かなくなっていた。ここをCやDなど複数指定する方法があるのかどうか判らないが、一旦は「C:\Web\Info」にコピーしてPukiWikiのトップページが表示されるところまでは確認した。
で、ページの新規作成、ってやると「エラー」なんで?おまけに、管理者の所に書いた自分の名前(ひらがな)も化けている。
PukiWikiの管理者名(日本語)が化けている件
phpinfoを見てみると、mbstring(マルチバイト文字列用のライブラリ)が読み込まれていないことが判った。PHP 5.2.6を初期設定のママインストールすると、extensionを入れるextフォルダすら作られないようなので、プログラムの追加と削除からリペアインストールを行い、追加で「Multi Byte String」とかって項目を選んで入れ直す。次に、php.iniにあるmbstring関連の設定を下記のように行った。
[mbstring] ; language for internal character representation. mbstring.language = Japanese ; internal/script encoding. ; Some encoding cannot work as internal encoding. ; (e.g. SJIS, BIG5, ISO-2022-*) mbstring.internal_encoding = EUC-JP ; http input encoding. ;mbstring.http_input = auto mbstring.http_input = pass ; http output encoding. mb_output_handler must be ; registered as output buffer to function ;mbstring.http_output = SJIS mbstring.http_output = pass ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. mbstring.encoding_translation = Off ; automatic encoding detection order. ; auto means mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another mbstring.substitute_character = none; ; overload(replace) single byte functions by mbstring functions. ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), ; etc. Possible values are 0,1,2,4 or combination of them. ; For example, 7 for overload everything. ; 0: No overload ; 1: Overload mail() function ; 2: Overload str*() functions ; 4: Overload ereg*() functions ;mbstring.func_overload = 0 ; enable strict encoding detection. ;mbstring.strict_encoding = Off
最後に、さらにphp.iniの末尾にエクステンションを読み込む記述を入れる。
[PHP_MBSTRING] extension=php_mbstring.dll
と思ったら、これはインストーラのオプションでMulti Byte Stringのエクステンションを入れた時点で追記されるようね。良くできたインストーラです。
この状態でphp.iniを読み込ませる必要があるのだけど、PCの再起動は行いたくないので、IIS管理画面から[ホームディレクトリ]タブの「アプリケーションの設定 / アンロード」でPHPをアンロードして読み直す(これで行けるらしい)。
それでもPukiWikiの管理者名が化ける件
ダメだった。さんざん試した結果、「pukiwiki.ini.php」がEUCで保存されていたことに気づく。今回Unicode版をダウンロードしたので、設定がすべてUnicode読込になっているようだ。設定ファイルをUTF-8Nで保存するとうまくいった。
それでもまだ、新しいサイトで「新規ページ作成」が出来ない件は片付いていない。
疲れた....PHP 5.2.6諦めていいですか
というわけで、以前ダウンロードしていたphp5.0.4を引っ張り出して使うことにしてみた。このバージョンはインストーラでISAPIとかの選択を行うようになっていないので、自分でZip版からphp5isapi.dllを引っ張り出して使う必要がある。phpのフォルダにphp5isapi.dllを配置して、IISのISAPIフィルタに「php5is~1.dll」を、また、拡張子phpに対する割り当ても、標準でphp-cgi.exeになっているのを「php5is~1.dll」に変更すると、とりあえずphpinfo()による表示ではきちんと情報が出るようになった。
それでもいろいろあって
5.0.4で動かしたところ、やはり新規作成や編集などで
検索中のページは、 ページ アドレスが間違っているため表示できません
なんて普通にIEのエラーが出てしまう。PukiWiki 1.4.6とPHP4でまともに動いていた時のpukiwiki.ini.phpをDIFFを掛けて新しい設定ファイルを比較したところ、違っていたのは
- $Scriptを設定していた(新しい方は設定していた)
- PKWK_ALLOW_JAVASCRIPTを0(初期値)のままにしていた
- $nowikinameを0にしていた
でした。2と3については合わせても変化無し。1については設定をやめてコメントアウトすると、編集画面までは出ましたが、編集完了して登録すると
Warning: fread() [function.fread]: Length parameter must be greater than 0.
みたいな警告が出ていたものの、2回ほど出たあとはぱったりとやんで普通に動き始めた...
マジでPHP勉強すっかね。
あぁ、やっぱり出た。ページの名前変更をやってみたら
Warning: fread() [function.fread]: Length parameter must be greater than 0. in C:\Web\info\lib\file.php on line 34 Warning: fread() [function.fread]: Length parameter must be greater than 0. in C:\Web\info\lib\file.php on line 34 Warning: fread() [function.fread]: Length parameter must be greater than 0. in C:\Web\info\lib\file.php on line 34 Headers already sent at C:\Web\info\lib\file.php line 34.
って。
とりあえず、http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/pukiwiki/pukiwiki/lib/file.php?only_with_tag=MAIN にあったfile.phpのVer.1.93に差し替えてみたところ、現時点においては快調。