完全復活、っていったって、読んでいる人にはほとんど関係ない。
昨日再インストールしたサーバが、とりあえず必要な機能を完全に取り戻した、と言う話。
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)
同じテーマの日記(最近の一覧)
別年同日の日記
17年 遅い Javascript を iframe に追い出す方法
申し訳ありませんが、現在意見投稿をできない状態にしています。 |