さくらサーバからロリポップへの引越しのメモ

さくらロリポップ
プランスタンダードロリポプラン
月額500円105円
容量10GB5GB
PHP5.2.17
5.3.14も可
5.3
DBMySQLなし(SQLite3)
cron5個1個
維持費5分の1ですからね…。
180MB分のMySQLのデータをSQLiteへ変換するのは本当に苦労しましたが、頑張って引越ししました。

さくらの最安プランはPHP使えませんし…orz
そんなわけで、さくらからロリポップへの以降の際につまづいた箇所とその解決法のメモです。


サイト、開発環境の情報
使用言語 : PHP(CakePHP), JavaScript(jQuery)
開発、管理に使用するPCのOS : Linux Mint 12 LXDE


目次
  1. cronの設定
  2. APCのキャッシュへ書き込めない
  3. 文字化け対策
  4. lftpの設定
  5. $this->referer() が正常に動作しない


cronの設定

ロリポプランでは、シェルスクリプトを実行させることはできません。
よって、CakePHPのシェルを使うこともできません。
仕方がないので、cronではPHPを実行させています。

/home/users/0/moo.jp-kitel/web/app/database/cron.php


通常ならこれだけでいいと思いますが、
CakePHPの機能を利用した処理をすることはできません。
しかたなく、このPHPファイルの中で、さらにCakePHPのアクションをURLを使って呼び出しています。
つまり、内部だけで処理は完結せず、一般の人でもアクセスできる場所に
サイトの維持管理のための処理のスタートボタンが設置されていることになります。
一応、パスワードをパラメータとして送ることで、部外者のアクセスを遮断していますが…。


(cron.phpの中身)
<?php
readfile('http://kitel.moo.jp/(コントローラ)/(アクション)/(パスワード)');
?>


APCのキャッシュへ書き込めない


Warning: _cake_core_ cache was unable to write ‘cake_dev_ja’ to Apc cache in 〜
CakePHPを丸ごとアップロードしてブラウザでページを開くと、上記のような警告が表示されました。
php.iniの設定画面で、"apc.enabled"を"1"にすることで解決できます。



Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。
PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。
【参考】
PHP: 導入 - Manual
http://www.php.net/manual/ja/intro.apc.php


CakePHP2.0ハンズオン@札幌で使用した資料を公開します - nazolabo
http://nazo.hatenablog.com/entry/2012/04/25/151716


文字化け対策

私が作成したファイルの文字コードは、すべてUTF-8です。
ロリポップのデフォルトは違うようですが、php.iniのエンコード関連をUTF-8に変更すればOKです。


"mbstring.language" を "Japanese"に。
"mbstring.internal_encoding" を "UTF-8"に。


"default_charset" を "UTF-8"に。


lftpの設定

Windowsの場合は、"FFFTP"を使ってGUIで操作できるのでお手軽です。
Linuxにも"gFTP"があるのですが…、CUIで操作する"lftp"のほうが、
操作をファイルにまとめて自動化できるので長い目で見れば楽です。


で、注意点がひとつ。
SSLをオフにする。これだけです。


まずはFTPで接続します。


$ lftp
lftp :~> open ftp.kitel.moo.jp -u moo.jp-kitel
パスワード:(パスワード入力)
このあと"ls(リモートディレクトリ一覧表示)"すると、下記のような警告が。

lftp moo.jp-kitel@ftp.kitel.moo.jp:~> ls
ls: 致命的エラー: Certificate verification: certificate common name doesn't match requested host name `ftp.kitel.moo.jp'
SSLをオフにすればOK。

lftp moo.jp-kitel@ftp.kitel.moo.jp:~> set ftp:ssl-allow off
lftp moo.jp-kitel@ftp.kitel.moo.jp:~> ls
drwx---r-x 6 moo.jp-kitel LolipopUser 4096 Jul 23 14:20 .
drwx---r-x 6 moo.jp-kitel LolipopUser 4096 Jul 23 14:20 ..
-rw-r--r-- 1 moo.jp-kitel LolipopUser 105 Jul 22 14:43 .gitignore
-rw-r--r-- 1 moo.jp-kitel LolipopUser 140 Jul 22 14:43 .htaccess
...
【参考】
lftp - [物理のかぎしっぽ]
http://hooktail.org/computer/index.php?lftp


lftpで接続できない時の対処法・・・ - WEB系エンジニアの備忘録
http://blog.romaji.net/webprogram/2010/04/lftp.html


ログイン後のディレクトリも確認できたので、普段のミラーリングはファイルにまとめて自動化します。


$ lftp -f ~/lolipop.lftp

(lolipop.lftp)
open ftp.kitel.moo.jp -u moo.jp-kitel,(パスワード)
set ftp:ssl-allow off
lcd /home/sutara/CakePHP/app
cd app
mirror -R -e -n -X *.*~ -X *.bak -x .htaccess -x Config/database.php


$this->referer() が正常に動作しない

これについては、別に記事を設けています。
http://d.hatena.ne.jp/sutara_lumpur/20120725/1343220843