主に問題となるのは以下3点(※参考)
requireで問題なかったところがrequire_onceじゃないとエラーになる
全部ではない。エラーが出たとこだけ直せば問題ない様子。
オブジェクトの代入の扱いが変わった
PHP4まではオブジェクトのコピーはディープコピーを行っていたが、
PHP5ではデフォルトでシャローコピーで行われる。
オブジェクトをディープコピーするには、cloneを使う。
※ディープコピー:オブジェクト本体だけでなく、参照しているオブジェクトも同時コピー
シャローコピー:コピー元と同じオブジェクトを参照するものとしてコピー
ということらしい。
i18n系がPHP5で使えない
PHP3のi18n系=PHP5のmb_系。PHP4は両方使える。
PHP3使い慣れてた人はPHP4で同じノリで使ってたりするけど、
PHP5にバーションUPするとき、使えなくなる。
以下動かすことだけを目的とした修正方法。
どっちにしろめんどくさい。
- パッチを当てる
mbstring.cにPHP_FALIAS(mbstrlen, mb_strlen, NULL) PHP_FALIAS(mbstrpos, mb_strpos, NULL) PHP_FALIAS(mbstrrpos, mb_strrpos, NULL) PHP_FALIAS(mbsubstr, mb_substr, NULL) PHP_FALIAS(mbstrcut, mb_strcut, NULL) PHP_FALIAS(i18n_internal_encoding, mb_internal_encoding, NULL) PHP_FALIAS(i18n_http_input, mb_http_input, NULL) PHP_FALIAS(i18n_http_output, mb_http_output, NULL) PHP_FALIAS(i18n_convert, mb_convert_encoding, NULL) PHP_FALIAS(i18n_discover_encoding, mb_detect_encoding, NULL) PHP_FALIAS(i18n_mime_header_encode, mb_encode_mimeheader, NULL) PHP_FALIAS(i18n_mime_header_decode, mb_decode_mimeheader, NULL) PHP_FALIAS(i18n_ja_jp_hantozen, mb_convert_kana, NULL)
※こっち避けたんで未確認。
- サーバ側設定になるからちょっとやりづらい。
- httaccessとPHPの合わせ技(無理矢理)
httaccessで<IfModule mod_php5.c> php_value auto_prepend_file '各々ディレクトリ/php5_plus.php' </IfModule>
としてphp5_plus.phpに
function i18n_convert($aa, $bb, $cc=null){ return mb_convert_encoding($aa,$bb,$cc); }
とか使うi18系を書いてく。
- 対応は『パッチをあてる』の『PHP_FALIASうんたら』を参照。
1個1個設定しなきゃいけないけど、1個作ればあとは使いまわせる。 - ただhtaccessがどこでも使えるってワケじゃないから…
- 対応は『パッチをあてる』の『PHP_FALIASうんたら』を参照。
因みに
<IfModule mod_php4.c>
はPHP4
<IfModule mod_php5.c>
はPHP5
に対応
※参考になるかも?
コメント