TOP ▲ itcore TOP TIPS

古いPHPシステムをCentOS+PHP5.3へ移行する。 | itcore 2017

●PHPの設定 mysql_xxx()関数を有効にする。
# yum -y install php-mysql
# yum -y install mysql-devel
# service httpd restart

# cd /home/www/xxx/htdocs
# vi .htaccess
以下を入力
# <? を有効にする。
php_flag short_open_tag on
# PHPの拡張子変更
AddType application/x-httpd-php .php .phtml .html

●HTMLの移行
新サーバより
# rsync -av root@10.0.0.30:/home/xxx/ /home/xxx/

オーナーとパーミッションの変更
# chown -R オーナ.グループ /home/www/xxx
# find /home/www/xxx -type d -print | xargs chmod 755
# find /home/www/xxx -type f -print | xargs chmod 644

●DBの移行
現サーバから対象データベースをダンプ
mysqldump -uroot -p -B xxx > /home/xxx/xxx_`date "+%Y%m%d"`.sql
ユーザアカウントをダンプ
echo use mysql > xxx_`date "+%Y%m%d"`user.sql
mysqldump -uroot -p -ct mysql --tables db user --where="User='xxx'" >> xxx_`date "+%Y%m%d"`user.sql

新サーバにて取り込み
# rsync -av root@10.0.0.30:/home/xxx/xxx_*.sql /home/xxx/.
# yum -y install nkf
# nkf --utf8 < /home/xxx/xxx_`date "+%Y%m%d"`.sql > /home/xxx/xxx_`date "+%Y%m%d"`-utf8.sql
# mysql -uroot -p < /home/xxx/xxx_`date "+%Y%m%d"`-utf8.sql
# mysql -uroot -p < /home/xxx/xxx_`date "+%Y%m%d"`user.sql
# service mysqld restart
確認
# mysql -uxxx -p
現サーバのmysql xxxアカウントのパスワード
# mysql> show databases;

●漢字コードの変換
現在のファイルの漢字コードとファイル数を確認する。(ファイルが多いと時間がかかる)
# yum -y install nkf
# find . -type f -print | xargs nkf -g | cut -d: -f2 | sort | uniq -c | sort -k1 -n -r
5426 UTF-8 (LF)
4918 ASCII
2784 BINARY
2735 ASCII (LF)
1832 UTF-8 (CR)
1695 ASCII (CR)
1610 Shift_JIS (LF)
12 Shift_JIS (CR)
10 EUC-JP (LF)
4 UTF-8
# Shift_JISのファイルをUTF-8に変換する。(上書き変換)
# vi s2u.sh
以下を入力
# SJISファイルをUTF-8に変換する。
# 標準入力からファイル一覧を読み込む。
while read LINE1; do
#echo file = $LINE1
KANJI=`nkf -g $LINE1 | cut -d'(' -f1`
#echo kanji = $KANJI
if test "Shift_JIS" = $KANJI; then
echo nkf --utf8 --overwrite $LINE1
nkf --utf8 --overwrite $LINE1
fi
done

# chmod +x s2u.sh
# find . -type f -print | ./s2u.sh

変換後のファイルを確認
# find . -type f -print | xargs nkf -g | cut -d: -f2 | sort | uniq -c | sort -k1 -n -r
7036 UTF-8 (LF)
4918 ASCII
2784 BINARY
2735 ASCII (LF)
1844 UTF-8 (CR)
1695 ASCII (CR)
10 EUC-JP (LF)
4 UTF-8

HTML漢字コード設定確認 charset=xxx
# find . -type f -print | xargs grep -io charset=.* | cut -d: -f2 | cut -d\> -f1 | sort | uniq -c | sort -k1 -n -r
1033 charset=UTF-8
735 charset=binary
630 charset=binary
581 charset=Shift_JIS
441 charset=utf-8
441 charset=us-ascii
378 charset=utf-8
378 charset=us-ascii
304 charset=Shift_JIS"
249 charset=MS932" /
43 charset="UTF-8"
18 charset=utf-8"
15 charset=UTF-8" http-equiv="Content-Type"
13 charset=\"iso-2022-jp\"\n";
13 charset="iso-2022-jp"
11 charset="utf-8"
8 charset=iso-2022-jp";
8 charset=UTF-8"
7 charset=Shift_JIS" /
3 charset=Shift_JIS" http-equiv=Content-Type
3 charset=SHIFT-JIS"
1 charset=utf-8" /
1 charset=Shift_JIS\"
1 charset=Shift_JIS" http-equiv="Content-Type"
1 charset=ISO-2022-JP\n";

HTML漢字コード置き換え
# find . -type f -print | xargs grep -il charset=Shift_JIS | xargs perl -pi -e 's/Shift_JIS/UTF-8/gi'
# find . -type f -print | xargs grep -il charset=SHIFT-JIS | xargs perl -pi -e 's/SHIFT-JIS/UTF-8/gi'
# find . -type f -print | xargs grep -il charset=MS932 | xargs perl -pi -e 's/MS932/UTF-8/gi'
# find . -type f -print | xargs grep -io charset=.* | cut -d: -f2 | cut -d\> -f1 | sort | uniq -c | sort -k1 -n -r
1618 charset=UTF-8
735 charset=binary
630 charset=binary
443 charset=utf-8
443 charset=us-ascii
378 charset=utf-8
378 charset=us-ascii
318 charset=UTF-8"
258 charset=UTF-8" /
44 charset="UTF-8"
19 charset=utf-8"
18 charset=UTF-8" http-equiv="Content-Type"
14 charset=\"iso-2022-jp\"\n";
14 charset="iso-2022-jp"
12 charset="utf-8"
9 charset=iso-2022-jp";
4 charset=UTF-8" http-equiv=Content-Type
2 charset=utf-8" /
2 charset=UTF-8\"
2 charset=ISO-2022-JP\n";

●.htaccessの中の絶対ファイルパスを修正する。
# find . -type f -print | grep .htaccess$
各ファイルの内容を見てviで修正する。

●廃止された関数エイリアスの置き換え
# vi alias.sh
以下を入力
#!/bin/bash -x
# 自分を変換しないように
mb="mb"; j18n="j18n";
name1=("${mb}strlen"); name2=("mb_strlen");
name1+=("${mb}strpos"); name2+=("mb_strpos");
name1+=("${mb}strrpos"); name2+=("mb_strrpos");
name1+=("${mb}substr"); name2+=("mb_substr");
name1+=("${mb}strcut"); name2+=("mb_strcut");
name1+=("${j18n}_internal_encoding"); name2+=("mb_internal_encoding");
name1+=("${j18n}_http_input"); name2+=("mb_http_input");
name1+=("${j18n}_http_output"); name2+=("mb_http_output");
name1+=("${j18n}_convert_encoding"); name2+=("mb_convert_encoding");
name1+=("${j18n}_detect_encoding"); name2+=("mb_detect_encoding");
name1+=("${j18n}_encode_mimeheader"); name2+=("mb_encode_mimeheader");
name1+=("${j18n}_decode_mimeheader"); name2+=("mb_decode_mimeheader");
name1+=("${j18n}_convert_kana"); name2+=("mb_convert_kana");
#echo ${#name1[*]}
last_no=`expr ${#name1[*]} - 1`
start_no=0
#last_no=2
#echo $last_no
for i in `seq $start_no $last_no`; do
#echo "i = $i ${name1[$i]} ${name2[$i]}";
#echo "$i find . -type f -print | xargs grep -il ${name1[$i]} | xargs perl -pi -e \"s/${name1[$i]}/${name2[$i]}/g\""
find . -type f -print | xargs grep -il ${name1[$i]}
find . -type f -print | xargs grep -il ${name1[$i]} | xargs perl -pi -e "s/${name1[$i]}/${name2[$i]}/g"
done
ここまで

chmod +x alias.sh
./alias.sh

●非推奨になってエラーになる関数の置き換え。
split($sep, $data) → explode($sep, $data)
ereg("$reg", $data) → preg_match("($reg)", $data)