misc.log

日常茶飯事とお仕事と

PHP 5.2.6とPukiwiki

ちょっとした情報メモ用にPukiwikiをまた立ち上げようとしたら、PHPとかってもうバージョン4は終わっちゃってるのね。というわけで、最新版を懲りずに試してみることにした。

インストール

  1. PHP 5.2.6インストーラ版を入手してインストール。WebサーバーはWindowsXPIISなので、ISAPIモードでインストールする(以前はZip版からDLLを抜いたりしないと行けなかったのが、一通りのものを配置してくれるようです)。
  2. IISの管理画面で、ツリー表示のWebサイト→右クリックプロパティ→[ISAPIフィルタ]タブ→[追加] から、「C:\Program Files\PHP\php5isapi.dll」をフィルタ名「php」で追加。
  3. 同じく[ホームディレクトリ]タブ→アプリケーションの設定、「構成」ボタン→拡張子phpに上記のphp5isapi.dllが指定されていることを確認。
  4. phpinfoを書いたファイルを配置して、開く。
  5. 「-2147417842 (0x8001010e)」と表示...なんでーーー!!
  6. リロードしてると、たまに「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を掛けて新しい設定ファイルを比較したところ、違っていたのは

  1. $Scriptを設定していた(新しい方は設定していた)
  2. PKWK_ALLOW_JAVASCRIPTを0(初期値)のままにしていた
  3. $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に差し替えてみたところ、現時点においては快調。