PHP4からPHP5にUPした際の問題対応

主に問題となるのは以下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がどこでも使えるってワケじゃないから…

因みに

<IfModule mod_php4.c>

 はPHP4

<IfModule mod_php5.c>

 はPHP5
に対応

※参考になるかも?

コメント

タイトルとURLをコピーしました