の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
倉金家ホームページ
趣味の部屋/サーバー構築メモ その2
|
|
2010年8月21日(土) |
2010年9月4日(土)更新 |
httpサーバーとphpMyAdminがそこそこ稼動したところで、古いサーバーから新しいサーバーへホームページの移行を行います。
|
|
|
新しいサーバーにホームページデータの移行を行うにあたっては、いろいろ心配ごとがあります。 ? 言語コードが違うが文字化けしないだろうか。(euc-jpからutf-8に変わる。) ? ホームページはほとんどphpを使って書かれているが、ちゃんと動作するだろうか。 (ちなみに古いVine4のphpのバージョンは5.2.9、CentOS5は5.1.6) ? MySQLやSQLiteのデータをそっくりコピーするだけでいけるだろうか。 などなど。 問題があったらそのときはそのとき。まずは元気にやってみよう!
|
準備
古いサーバーと新しいサーバーで apache, mysql の uid, gid が合っているか確認。apache は同じでしたが mysql は違っていました。今後のことを考えて古いサーバーの mysql の uid, gid を新しいサーバーに合わせました。(当然データなどのディレクトリやファイルの uid, gid もそれに合わせて変更。たまたま番号があいていたからよかったけど。)
次に、データのコピーを行うためのプログラム(スクリプト)を準備します。
|
バックアップスクリプトの作成
現行のサーバーのホームページコンテンツは日々アップデートされており、サーバーの入れ替えまで続きます。 一回だけのデータ移行では済まないので、バックアップする形でデータの移行プログラムを作成。 こんな感じ。
|
#!/bin/sh
LOGFILE="/root/Desktop/backup.log"
# フォルダの内容をコピーする # 新規か新しい場合のみコピー function backup() { echo "updatecopying from $1 to $2" | tee -a "$LOGFILE" if [ -d "$1" -a -d "$2" ] ; then cd "$1" find . -print | cpio -avdmp "$2" 2>&1 \ | grep -v "newer or same age version exists" \ | sed "s/\/\.\//\//" \ | tee -a "$LOGFILE" echo | tee -a "$LOGFILE" else echo "********** Can't open $1 or $2 ***********" | tee -a "$LOGFILE" echo | tee -a "$LOGFILE" fi }
echo "$0 start" | tee "$LOGFILE" date | tee -a "$LOGFILE" echo | tee -a "$LOGFILE"
# ここにバックアップを羅列 # ホームページのプログラム、写真等 SRCDIR="/mnt/oldhome/(古いサーバーの表示ディレクトリ)" TGTDIR="/home/http/(新しいサーバーの表示ディレクトリ)" backup $SRCDIR $TGTDIR echo | tee -a $LOGFILE # SQLデータ SRCDIR="/mnt/oldhome/mysql/(古いサーバーのサイトSQLデータディレクトリ)" TGTDIR="/home/mysql/(新しいサーバーのサイトSQLデータディレクトリ)" backup $SRCDIR $TGTDIR echo | tee -a $LOGFILE
. . . . . . . .
echo "MySQL restart" | tee -a $LOGFILE service mysqld restart | tee -a $LOGFILE echo | tee -a $LOGFILE
echo "$0 finished" | tee -a $LOGFILE date | tee -a $LOGFILE echo | tee -a $LOGFILE exit
新しいサーバーにバックアップ先のhttp表示ディレクトリやMySQLデータディレクトリをつくり、このバックアップスクリプトを走らせます。 |
|
表示させてみる
http://localhost/(サイト名)/でコピーしたサイトを表示させてみます。 ...何も表示されずエラーが出たり、表示されても文字化けしたり。
ホームページプログラム"IRORIBATA"と各サイトの設定ファイルをすべてutf-8に変換。 charset宣言部分<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">などのeuc-jpをutf-8に変更。
今度はMySQLを使ったサイトはばっちり表示はされます。文字化けもありません。MySQLの場合は内部ではutf-8で保存されており、my.confの設定にしたがってそれをeuc-jpあるいはutf-8その他で出力しているだけのようです。
しかしSQLiteを使ったサイトはまったく表示されません。 原因調査!…どうやらCentOS5ではそのままでは従来のSQLite関数は使えないようです。apacheエラーログにはSQLite関連の関数がundefined functionと記録されています。
|
対策
もともとホームページのデータサーバーはMySQLで、途中からSQLiteも試してみただけのことで、SQLiteにこだわる必要はありません。 他に選択肢がないならともかく、データサーバーはMySQLを使うことに変更。 SQLiteを使えるようにするのはそのうち暇を見て。 (SQLiteの場合は言語コードの変換はしてくれないらしいということもあり。) SQLiteからMySQLへの変換プログラムを作り、データをすべてMySQLに変換、データベースをMySQLに切り替えて一件落着。
いちおうすべてのサイトをコピーし、必要なファイルの言語変換や設定を行いサイト移行の準備は完了です。(けっこう時間がかかってしまった。)
|
しかしせっかくSQLiteも使えるようにプログラムを組んであるのにCentOSでは使えないというのも面白くありません。 なんとか使えるように検討してみます。
...それにしても今年の夏は暑いなー。脳味噌に力が入らん。
|
|
|