[PHP-dev 213] Re: [PATCH] multibyte patch for PHP 4.1.0

Youichi Iwakiri php-dev@php.gr.jp
Mon, 14 Jan 2002 14:17:20 +0900


いわきりです

Masaki Fujimoto wrote in <20011223000555.F0A0.MASAKI-F@fides.dti.ne.jp>:
 >ふじもとです。
 >Tomoyuki Asakawa <tom@asakawa.ne.jp> wrote:
 >> ところで、このパッチは、Zendコンパイラ/オプチマイザと互換
 >> はあるのでしょうか?
 >すみません、実は未検証です。APCは構造的に問題ないと思うのですがZend製品
 >に関しては自信がありません。どなたか動作させてみた方がいらっしゃると良い
 >のですが。まとまった時間がとれたら検証したいですが、ドキュメントの和訳を
 >優先させたいのでしばらくは無理そうです。

まだ、PHP-4.1.0対応のZend Optimizerが出ていないのでなんとも言えませんが、
zend_extensionとして提供されてきたZend Optimizerなので、
zend_compile.cとzend_execute.cにあるcompile(), execute()を
フッキングして独自パーサ(最適化パーサ)を通して中間コードを
生成しそれを実行可能なexecutorに渡す動作だと思います。

藤本さんのpatchですとZend Optimizerに寄って置きかえられる前の
compile()関数が呼び出すlanguage_scannerの箇所に手を加えるので
置きかえられた時点で機能しなくなると考えてます。

どうしたらZend製品と相性良く出来るか考えたんですけど
結構大変に成りそうです。

1. compile(), execute()内にあるFile I/Oを外部に出す。
2. compile()に渡す前処理としてファイルを読みこみEUC,もしくはUTF-8に
   変換する
3. compile()は通ると思います。
4. execute()の中でrequire_once, require, include_once, includeが
   出てきた場合もexecute()が独自にI/O処理をせず'2.'の変換用の関数を
   呼び、変換されたものをcompile()に渡す。

これだとなんとかなるかもしれませんが、
現実解としてはZend製品とは同時に使わない(使えない)とするしかないかも :(

Tomoyuki Asakawa <tom@asakawa.ne.jp> wrote:
 >> そのおかげで、文字コードや、プログラムという、ものを理解できない
 >> ディザイナに、phpコードの含有した、htmlを渡してもなんとかなりました。
 >> PHP4は現状では、上記の人に使わせるには、おまじないが多すぎて、結構難
 >> しいです。
 >> はやくPHP3並に、なってほしいと思います。
 >> 
 >> PHP3は、ソースを内部コードに自動変換する機構があった
 >> おかげで、internal_encodingをEUCにすることで、すべて?
 >> 丸く収まりました。(ファイルのコードでは混乱しましたが)

運用で切りぬけましょうと言うのは、前向きじゃないですね。

一応こんな感じで、
サーバ内のドキュメント置き場

 /www/htdocs/develop           確認用のドキュメント置き場
 /home/web_contents/incoming/  デザイナさんたちにファイルを置いてもらう場所
 /home/web_contents/converted/ euc変換後のデータ置き場
 あと
 ln -s /home/web_contents/converted /www/htdocs/develop
 とかもしておけば、

cronで数分置きにincomingを監視し、新規作成または更新されたファイルを
変換しconvertedディレクトリへ置く。
#htmlファイルのヘッダにcontent-encodingなんかがあるのでそれも置換しなきゃ
#いけないですけど。

変換までに多少のタイムラグがあるのでイライラする
人が出るかもしれませんが、そこはお茶でも飲んでもらって
リラックスしてもらった方がよいかも