環境が異なるサーバーへのアプリケーション移行

【この記事の所要時間 : 約 4 分

ある事情でAというサーバーにおいてあるアプリをBというサーバーへ移すことになった。
A : PHP 4.42 , MYSQL 4.0.2
B : PHP 5.14 , MYSQL 5.0.22
サーバ環境がまったく同じであればアプリ移行もそれほど難しくもないが、異なる環境だとふつう動かなくなる。
実際、アプリ移行してみるとやっぱり動かなかったので、一部ソースコードを修正する必要があった。
今後の参考のために、備忘録としてブログに書いておく。
現象
まずはデータベースを移行しようと思い、ダンプをphpMyAdminでインポートしたが、データがphpMyAdmin上で文字化けしている。
原因
アプリをSJISで作っていたのでデータもSJISなのにテーブルの照会順序がUTF-8になっていたので文字化けしていた。
対策
テーブルの照会順序を「sjis_japanese_ci」に変更し、再度データをSJISエンコードしてインポート。
結果
文字化けせずに表示された。
現象
PHPで表示した2バイト文字が画面上で文字化けしている。
原因
MySQLを4.0.2から5.0.22にアップデートしたため、文字コードが自動変換されてSQL文がSJISで発行されていなかったため。
対策
SQL文を発行する前に「SET NAMES SJIS」を発行し、SQL文をSJISで発行するように修正。(phpMyAdminは、内部的に指定された言語&エンコーディングにしたがって「SET NAMES ○○」を呼んでいるためphpMyAdmin上では文字化けしていなかったみたい)
結果
文字化けせずに表示された。
補足
・文字コードを確認するSQL文「SHOW VARIABLES LIKE ‘char%’;」
・MySQL4.1以上対応のアプリは、必ず”SET NAMES キャラクターセット名”というSQL文をサーバーに接続した直後に実行すること。
現象
PHPスクリプトのタグ <?= $body ?> の部分が表示されない。
原因
PHPスクリプトの省略形である <?= 変数 ?> が使えないみたい。
対策
他の方法でもいいみたいだが、とりあえず省略形をやめて、 <?php print $body; ?> に修正。
結果
うまく表示できた。
現象
画像処理のGD関係のモジュールがうまく動いていなかった。
原因
サードパーティ提供のGDモジュールを利用していたが、そのモジュールでは、PHPスプリクトタグが <? ○○ ?> の形になっていた。
対策
<?php ○○ ?> に修正。
結果
うまく画像が処理されて表示された。
後日談:
<?= $body ?> と <? ○○ ?> を使えるようにするには、.htaccess に以下のように書くことで対応できることがあとでわかった。教えてくれたKさんありがとう!
(php.iniに書いてもいいが、PHP全体に影響を与えるので、.htaccess の方がいい)

<IfModule mod_php5.c>
#php.ini
        php_value short_open_tag On
</IfModule>

参考サイト:
PHPとMySQLの個人的まとめ
PHP+MySQL5における文字化け対策
.my.cnfを使ったユーザ別オプション指定
4.1以上の壁 (日本語の扱いの違い、文字化け等/含む5.0以上)

Webディレクション標準スキル152 企画・提案からプロジェクト管理、運用まで
アスキー・メディアワークス
売り上げランキング: 35,578
スポンサーリンク
レクタングル(大)広告
  • このエントリーをはてなブックマークに追加
スポンサーリンク
レクタングル(大)広告

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です