zuzara.comの各サービスはロリポップのサーバで運営されています。日頃の感謝を込めて月額263円のサービスを「ホリデープログラミング」する上でいかに使い倒しているか紹介したいと思います。
安い
ムームードメインで独自ドメインの.comを買っても初年度約5000円の投資のみ。これは、ものすごいコストパフォーマンスだと思う。
サブドメイン
バーチャルホストと思われる設定をWeb上の管理画面から行え、サブドメインが無制限に作れる。(ドキュメントに明記されていない模様だが制限はあるかもしれない)各サービスごとに絶対パスが/になってくれるので管理がちょっと楽。
PHP+MySQL
2009年6月現在はPHP5を選択できるようになった。今から使うのであれば自動的に5になる。バージョンは5.2.6。コンパイルオプションは以下。curlやopensslが使えるようになった。5から登場のPDOやjsonも使える。
'./configure'
'--prefix=/usr/local/php5'
'--sysconfdir=/usr/local/php5/etc'
'--with-config-file-path=/usr/local/php5/lib'
'--disable-debug'
'--enable-bcmath=yes'
'--enable-debug=no'
'--enable-discard-path'
'--enable-dom'
'--enable-exif'
'--enable-force-cgi-redirect'
'--enable-ftp'
'--enable-gd-native-ttf'
'--enable-magic-quotes=yes'
'--enable-mbregex'
'--enable-mbstring'
'--enable-safe-mode'
'--enable-simplexml'
'--enable-soap'
'--enable-sockets'
'--enable-sqlite-utf8'
'--enable-zend-multibyte'
'--with-curl'
'--with-bz2'
'--with-gettext=/usr/local'
'--with-iconv'
'--with-iconv-dir=/usr/local/include'
'--with-gd'
'--with-jpeg-dir=/usr/local'
'--with-png-dir=/usr/local'
'--with-freetype-dir=/usr/local'
'--with-ttf'
'--with-zlib=/usr'
'--with-zlib-dir=/usr'
'--with-ttf'
'--with-openssl'
'--with-mcrypt=/usr/local'
'--with-xsl=/usr/local'
'--with-xmlrpc'
'--with-mysql=/usr'
'--with-pcre-dir=/usr'
'--with-pear=/usr/local/php5/php'
'--with-pdo-mysql=/usr'
'--with-pdo-pgsql=/usr'
'--with-pdo-sqlite'
'--with-pgsql=/usr'
'--with-sqlite'
PHPは2006年7月現在4.3.11でコンパイルオプションは以下。gdが動くので特に困ったことはない。
'./configure'
'--enable-ftp'
'--with-mysql'
'--with-gd'
'--with-ttf'
'--with-apxs=/usr/local/apache/bin/apxs'
'--enable-track-vars'
'--enable-trans-sid'
'--enable-zend-multibyte'
'--enable-mbstring'
'--enable-mbregex'
'--enable-mbstr-enc-trans'
'--enable-memory-limit'
'--enable-sockets'
'--with-jpeg-dir=/usr'
'--with-png-dir=/usr'
'--with-freetype-dir=/usr'
'--with-zlib-dir=/usr'
'--enable-exif'
'--with-dom=/usr/local'
'--with-dom-xslt'
'--enable-xslt'
'--with-xslt-sablot'
MySQL3.23.49はphpMyAdminで管理。データベースは1つしか作れない。
*.so
PHP5での動作は未確認。特に必要ないだろう。
PHP4環境ではdlで拡張できてしまう。php-jsonやADOdb辺りが便利。コンパイルは別の環境で行ってsoファイルをアップロードすれば使える。
ローカルに開発環境は必要
ロリポップはFTPしか使えないので開発環境はローカルにないと不便。FTPは昔からFFFTP。
自分は先日無料になったVirtualPC2004上のWhiteBoxLinuxでSambaを動かしてWindowsのgvimで編集している。なおVirtualPCはCentOS4などいくつかのOSがインストールできないので要注意。(動作確認したOS一覧が表になったページがあったが失念⇒コメントで教えていただきました:What Works and What Doesn’t in Microsoft Virtual PC 2004)
他にもVMwareやcoLinuxも無料で使える。
追記:
最近は Mac 使いなのでそのまま apache+mysql+php 環境が整う。Windows なら VMware を使うところ。
PEAR
PHPのPEARはデフォルトではあまり充実していないので自分でPEARのサイトからダウンロードして解凍、必要なファイルをアップロードする必要がある。一番使っているのがCache_Lite。
Cache_Liteのベースになるコード。
<?php
require_once 'Cache/Lite.php';
$cacheOptions = array (
'cacheDir' => 'tmp/',
'lifeTime' => 3600, // seconds
);
$cacheId = $url;
$objCache = new Cache_Lite($cacheOptions);
if ($cache = $objCache->get($cacheId)) {
$buf = $cache;
} else {
$buf = file_get_contents($url);
$objCache->save($buf, $cacheId);
}
?>
参考:
ブラウザからPEARをインストールする
cron
cronは使えない。どうしても必要な時は別のcronが使えるサーバからping(HTTPでアクセスするだけ)して代用。
.htaccess
PHP5環境では.htaccessやini_setで設定を変えられない。ロリポップのユーザ画面から設定できる項目は以下に載っている。PHP4のときに設定できた項目のため、という雰囲気だが display_errors の設定ができないのが痛い。(2009年6月現在ロリポップに問い合わせ中 => 要望として受け入れられた模様)
php.iniの設定が古めなので必須。
php_flag register_globals Off
php_value error_reporting 2047
php_flag display_errors Off
php_flag log_errors On
php_value error_log ログへのパス
見られたくないディレクトリ用。PukiWiki参照。
Order allow,deny
Deny from all
mod_rewriteも動く。2.0っぽいきれいなURLを実現。Zend_Framework参照。
RewriteEngine on
RewriteRule !\.(html|txt|js|ico|gif|jpg|png|css)$ index.php
404ページはロリポのページなので設定しておいた方が無難。
ErrorDocument 404 /notfound.php
ErrorDocument 403 /notfound.php
MySQLのコネクション数の制限が厳しい
共有サーバだけあって若干重い。MySQLのToo many connectionsエラーが比較的目に付く。PEARのCache_Liteなどでキャッシュする必要がある。
静的なページなら1日2万PVぐらいは平気。ただ、PVが増えるとHDDの容量が(おそらくはapacheのログで)すぐいっぱいになってしまうので月額+105円で500MBまで増やす必要が出てくるかも。
ちなみに容量を一度増やすと減らせないので(月額料金はずっと増えたまま)要注意。
追記:
2009年6月29日から月額は同じで容量が1GBに増える。また、契約更新時に増量プランから元に戻せるそうだ。
アクセス解析は別サービスの方がよさげ
管理画面からanalogの解析結果を見れるが、GoogleAnalyticsの方が断然いい。一応、apacheの生ログもホスト名ごと、日別にダウンロードできる。リアルタイムではなく、半日ほどずれて昨日のログがダウンロードできる、という具合。
というわけでおすすめです、ロリポップ。