2002年06月13日の日記です


サーバー完全復活  2002-06-13 23:53:44  コンピュータ

完全復活、っていったって、読んでいる人にはほとんど関係ない。

昨日再インストールしたサーバが、とりあえず必要な機能を完全に取り戻した、と言う話。


PHP の非互換に多少苦しみました。

4.0 系列から 4.2 系列にいきなりバージョンアップしたので、非互換部分がぞろぞろ。



3.x のときに、日本語環境が i18n_ で始まるたくさんの関数で作られていた。

これは、公式なものではないがシステムの非常に奥底まで入り込み、上手に日本語を使いやすくしていた。


4.0 になって、i18n_* はなくなった。公式ではなかったので内部構造が変わると移植しにくかったのだ。

しかし、jstr_* と mbereg_* の2系統にわけられて復活。内部までは入り込まない、「とりあえず」の日本語化であったが、よく出来ていた。jstr_* になる際に、一部の関数名は変更された。


4.2 で、jstr_* は mb_* に、mbreg_* は mb_reg_* になって公式のものとなった。

今度は、i18n_* の時のように、システム内部にまで入り込んだ、良い日本語化となった。公式の強みだ。

そしてまた一部の関数名が変更された。i18n_* の頃の名前に戻った関数名もあるし、まったく新しくなったものもある。



今回、4.0 から 4.2 になるので、この関数名の違いをうまく吸収しなくてはいけなかった。

仕事で作った膨大なプログラムを、とりあえずそのまま動かせないと困るのだ。


幸い、そのためのプログラムを発見。

しかし、これは関数名の変更などは考慮していないものだった。指針を示した上で重要ではあるが。


さくっと改良して、実情にあわせた物にする。

関数への引数で、 EUC という文字列を渡すべきところが EUC-JP でなくてはならなくなったが、今はまだ EUC でも認識してくれるようだ。


また、mbreg_* 系の命令は、古い名前でも認識してくれるらしい。これも、しばらくの間の移行措置のようだが。




これを直したら終わりかと思ったら、思わぬ伏兵がいた。

nl2br 関数。これは、改行(NewLine)部分にBRタグを挿入する命令だ。

つまり、普通のテキストを nl2br に通すと、HTML として表示できるテキストになる。


4.0 系列では HTML の BR タグを出力していた。それが、いつの間にか XHTML 互換になっている。

KDDI の HDML では、 HTML 互換のシンプルな BR タグしか解釈できず、それ以外はエラーになる。これは大問題だ。


これに関しては、日本語命令の移行のようなプログラムは組めない。

同じ名前の命令で動作が変わるようなものは、プログラムでの対処が出来ないのだ。


ということで、PHP 本体にパッチを当てる。ext/standard/string.c のなかに nl2br の本体があるので、タグを生成している部分を書き換えてやればよい。タグのサイズも 6 文字から 4 文字に変わるので変更を忘れないように。



これで、おそらく下位互換性を確保したまま新しいバージョンを導入できた。

もちろん今回の措置は暫定的なもので、時間をかけて「正しい」プログラムに変更していったほうが良い。

(即時コンパイル言語である PHP では、プログラム量の増大は速度低下に直結する)



仕事で使うこともあって、当たらしい OS に興味があってもバージョンアップできないでいたが、これで一気に最新版。

新サーバーで気持ちよく作業ができる!


…K6-300Mhz だけどね (^^; ただの「ルーター」である、公開マシンより性能が低いよ (T_T)



同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

04年 夏至祭

07年 大人買い

17年 遅い Javascript を iframe に追い出す方法

18年 携帯電話コンテンツ


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -