OpenPNE。
「最近、anney's room、重くない?」と思ったあなた。
はい、大正解。
何故なら水面下で、SNSをオープンしていたからです。
そして、そのSNSで使用しているDBを
この「frei」や「Mac日記」でも使っていて、
負荷がかかり過ぎていたのであります。
かくして、SNSはanigon.netのサーバーに移転。
こちらは重くなくなったはずなのですが。
とにかく、サーバー移行するのに、エラー出まくって大変だった…(遠い目)
そのSNS、自分で全部作る気は勿論(?)なくて
「OpenPNE」を使っていたのですが。
どんなエラーに、どんな風に対応したのかメモっておきます。
■画像がアップできなくなった
具体的には、getimagesize関数でコケていた。
→form のファイルアップ時にデータの置かれる
テンポラリディレクトリ(/tmp)のパーミッションが原因。
ドイツのサーバー上では、特別な場所が指定されていて
パーミッションが 770 だったが、
webユーザーと、テンポラリディレクトリのユーザーとは
別のグループに所属していたので、書き込み権限等がなかった。
パーミッションを、嫌な気分だけど、777 にして解決。
■日付が狂った
なんせ基準はドイツ時間ですから、そりゃ狂います。
サーバー上のPHPは、4系だったので、途方に暮れる。
当然、レンタルサーバーなので、php.ini の変更も不可。
環境変数 TZ を変更しようと putenv("TZ==JST-9"); を実行しても
セーフモードになってて実行不可能。
仕方ないので、スクリプト中の date や gmmktime を検索して
全て手作業で修正(苦笑)
なお、記憶が正しければ、一番修正箇所が多かったのは
/OPENPNE_DIR/webapp/lib/db/read/ 以下。
修正する際に、代替関数をオリジナルで用意して、この関数と入れ替えた。
define('TIME_DIFFERENCE_GERMANY_IN_SUMMERTIME', 7);
define('TIME_DIFFERENCE_GERMANY', 8);
function anigonDate($format, $time = '') {
if (empty($time)) $time = time();
$timeDifference = (date('I'))
? TIME_DIFFERENCE_GERMANY_IN_SUMMERTIME
: TIME_DIFFERENCE_GERMANY;
return date($format, $time + $timeDifference*3600);
}
今後もし、また日本のサーバーや、どっか海外のサーバーに移動した場合も
この関数内を書き換えれば対応出来るので、便利。
■メールが飛ばなくなった
とにかく全てのメールが送信できなくなった。
→config.php 中の
「// Envelope-From ヘッダを設定するかどうか(safe_mode の場合は false に設定してください)」の部分を
「define('MAIL_SET_ENVFROM', false);」に変更。
そこに書いてあるように、セーフモードなんで、falseじゃないと送信出来ないみたいですわ。
■管理人用ページ上だけで「Division by zero in…」なるエラーが出る
早い話、本来なら、request の値として取得できるはずの値が全部空になっていて
それが 0 として見なされたせいで、割り算しているところで、上記のエラーになっていた。
→管理人用ページで用いるバリデータ用設定ファイルをFTPで転送途中で止まっていた。
再度、全設定ファイルをアップしたら問題解決した。
おまけ:
request の値はどこで設定しているのか調べようと
index.php 以降の流れを追ってみた。
(管理人用ページで、メンバー一覧を見ようとした時)
index.php
↓
/OPENPNE_DIR/webapp/lib/controller.php
openpne_execute関数
openpne_forward関数
↓
/OPENPNE_DIR/webapp/lib/OpenPNE/Validator/Common.php
common_validate関数
↓
/OPENPNE_DIR/webapp/lib/OpenPNE/Validator.php
validate関数
getParams関数
↓
/OPENPNE_DIR/webapp/modules/admin/page/list_c_member.php
execute関数
↓
/OPENPNE_DIR/webapp/modules/admin/lib/db_admin.php
db_admin_c_member_list関数
…と、こんな感じ。
うーん、他にもいろいろ細かい事があったんだけど
一気に作業したから、全部は覚えてない…。すいません。