So-net無料ブログ作成
検索選択

PHPバージョンアップ苦労話 [戯言]

Twitterでも呟いたことですが、『PHPを5.1から5.4に上げるためにやったことまとめ』http://dqn.sakusakutto.jp/2013/11/php51to54.htmlというサイトがあります。

対抗するわけではないのですが(多分)、去年、同じ様にPHP5.2からPHP5.4にバージョンアップを上げる作業をやっていて、すごく苦労した記憶があるので(この時に上記サイトが存在していれば…)、同じ様にやった事をまとめてみようかなと思います。
と言っても大抵同じ事をやっているのですが。


date()の呼び出しがエラーになる。

原因はtimezoneが指定されていないため。
php.iniに書いたら解決なのだけど、サーバ管理者が「php.iniは変更するな」とわがままを言うのでコード上で対処することに(そもそも、こんな面倒なことをする羽目になった原因を作ったのが自分だということを理解しているのですか? > サーバ管理者)

で、(どこからどういう経由で呼ばれるかわからないので)date()が使われている箇所の直前に下のコード(デフォルトタイムゾーンの設定)を書きまくることになりました。

date_default_timezone_set("Asia/Tokyo");
new したオブジェクトの代入の仕方が違う。

$xxx =& new XXX() となっているのを $xxx = new XXX() に書き換えました。

静的なメソッドの定義が…

$v =& XXX::funcA() という感じで(おそらく)静的なメソッドとして使われているメソッドの定義が
function & funcA()
となっていたからキチンと静的メソッドとなるように
static function & funcA()
と修正しました(これは元のコードのバグじゃなかろうか…。それでもPHP5.2では動いていたんですね)

ereg(), eregi() が無くなった。

代わりの関数に置き換え。

ereg("text", $str)preg_match("/text/", $str) に、
eregi("text", $str)preg_match("/text/i", $str) に。

htmlspecialchars() が文字化け。

デフォルトの文字エンコーディングが変更になったので、明示的に指定することにしました。

htmlspecialchars($_user[$key], 1)
htmlspecialchars($_user[$key], 1, "Shift_JIS")) に変更。

システム的に文字コードがShift-JISなのは正しいのですが、旧バージョンのデフォルト文字エンコーディングはISO-8859-1のはずで、よくよく考えると理屈が合わない気がします(今までだって文字化けしてたんじゃ…)

と、ここまでがどこでも共通の話になるのかな?


このシステムでは、フレームワークとして Mojavi を使っていました。
これが動かない原因となっているところもありました。

PHP5に正式に対応した Mojavi が存在しているのか、それともしていないのか良くわからない状態だったので、いっそのこと symfony に変更してしまおうかという案も出てきましたが、『ある理由』により却下。
元が PHP4用の Mojavi2 を使っていて、PHP4 から PHP5.2 に移行した時に、Mojavi2に手を入れたみたいなので、今回もやっぱり Mojavi のコードに手を入れることになりました。

オブジェクトの参照の仕方が…?

mojavi-all-classes.php にある =& を全て = に書き換えました。

何故コレで動くようになったのか甚だ疑問なのですが、エラーはなくなりました。

単なるバグだよね…?

mojavi/opt/logging/PatternLayout.class.php の function format (&$message)function & format (&$message) へ変更します。

PatternLayout の親クラス Layout では、formatメソッドの定義は function & format (&$message) になっていて、定義が不一致になるのでエラーになっていました。
単なるバグだよね…?(それでもPHP5.2では動いていたんですね)


と、以上がとあるシステムをPHP5.2からPHP5.4にバージョンアップした時に変更した内容です。確かに苦労したのですが、何をどうしたら良いかが分かれば、後は機械的に変更するだけの単純なお仕事。


さて、ここからが本題。

このシステム、元はとある開発会社に発注して作成したものなので、PHP5.4対応もその会社に依頼すべきなのだけど、『ある理由』のため自分達で対処しなければならなくなり、まぁ、それが苦労の大半を占めていたとも言います(資料とか手元に無いし)。

その『ある理由』とは…

サーバ管理者が無断で PHP5.4 に変えた。

勝手に変えるな!

利用者から「エラーになっている」という苦情で発覚。

システムが動くか事前にチェックしてないの?
こっちとしては、まさに寝耳に水。

PHPのバージョンは元に戻せない。

戻せないってどういう事!?

とにかく急いで何とかしないといけない。

開発会社は「そんな急に言われても」状態。

いやー、困った管理者を持つとホント苦労しますね。


タグ:PHP Mojavi
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0