[PHP-users 18418]Re: Windowsでの コンパイル方法

Hideto NAKAMURA hideto.nakamura @ hideton.ddo.jp
2003年 10月 12日 (日) 18:13:58 JST


中村英都です。

 いろいろアドバイスありがとうございます。

 ひとまずは、先の通り ZEND_MULTIBYTE を config.w32.h と 
zend_config.w32.h に加えてエラーはなくコンパイルはできました。ご
指摘のような問題があるのかどうかは分かりません。小泉様のご指摘も
まだ検証できていません。いずれ時間ができたときにでも検証したいと
思います。

 さて、その後、DLLとして外出ししないやり方はないかといろいろ試
しました。結局、
config.w32.h
に、
#define ZEND_MULTIBYTE 1
#define HAVE_MBSTRING 1
#define HAVE_MBREGEX  1
#define HAVE_MBSTR_CN 1
#define HAVE_MBSTR_JA 1
#define HAVE_MBSTR_KR 1
#define HAVE_MBSTR_RU 1
#define HAVE_MBSTR_TW 1
#define MBSTRING_EXPORTS 1
#undef COMPILE_DL_MBSTRING
を、zend_config.w32.h には、
#define ZEND_MULTIBYTE 1
のみを加えた上で、php4dllts.dsp に、ext/mbstring 以下の
ファイルを追加(Function Modulesにmbstringを作り、その中にインポ
ート)して、コンパイルすることで、DLLとして外だししないバージョ
ンも作ることができました。

 いろいろ見た限りでは、multipart での POST 時に SJIS でポストし
た場合に、\x5cを含むファイルでファイル名の取得がうまくいかない問
題(以前に廣川氏にお願いしたことがあります)に対応するためには、
DLLとして外出ししない形でないとうまく機能しないような気がします。
(パッチが、
#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
で囲ってあるため)

実際、いろいろテストすると、DLLとして外出ししない形でないと\x5c
問題はうまく解決されませんでした。また、その際には、php.ini で 
internal_encoding を「陽に」指定してしておかないと、POST時の処理
の部分では current_internal_encoding が不定(-1)となってうまく動
作しないことも分かりました(これで結構はまりました)。

 まだ、的はずれのところがあるかもしれませんが、みなさまの足しに
少しでもなればと思い投稿しました。

 廣川様、小泉様どうもありがとうございます。





PHP-users メーリングリストの案内